2014-04-01 3 views
4

julia의 일반적인 함수는 벡터의 멤버가 음수인지 아닌지를 나타내는 것입니다. 몇 가지 변화 후 내가 가진 :함수 변수가 for 루프 외부에 존재하지 않습니다.

function any(vec) 
    dim = size(vec) 
    for i in 1:dim[2] 
     fflag = vec[1,i] < 0 
     println("Inside any, fflag = ", fflag) 
     if fflag == true 
      result = 0 
      println("blabla ", result) 
      break 
     else 
      result =1 
      println("blabla ", result) 
      continue 
     end 
    end 
    println("hey, what is result? ") 
    println(result) 
    return result 
end 

나는 다음과 같은 결과를 볼 수있는 테스트를 실행하는 경우 :

Inside any, fflag = false 
blabla 1 
Inside any, fflag = false 
blabla 1 
Inside any, fflag = false 
blabla 1 
hey, what is result? 

result not defined 
at In[7]:57 

컴파일러는 '결과'정의되지 않은 것을 저에게 말한다 왜 모르겠어요. 변수가 존재하지만 for 루프 외부에 살지 않는 이유는 무엇입니까?

답변

8

documentation on variable scoping에는 for 루프가 새 범위를 정의한다는 내용이 명확하게 나와 있습니다. 즉, 실행이 for 루프를 벗어날 때 result이 범위를 벗어납니다.

function any(vec) 
    dim = size(vec) 
    result = -1 
    for i in 1:dim[2] 
     ... 

을 아니면 디폴트 값을 할당하지 않으려면, 그리고 확신 : 당신은 당신이 기대하는 행동을 주어야한다 루프에 대해 사전에 result 정의 println(result)

를 호출 할 때 따라서는 정의되지 값을 설정합니다 루프, 당신이 할 수있는 : 루프에 대한이 값을 설정하지 않는 경우

function any(vec) 
    dim = size(vec) 
    local result 
    for i in 1:dim[2] 
     ... 

을 첫 번째 예에서는, result-1 될 것입니다.

두 번째 예에서는 for 루프에 값을 설정하지 않으면 result이 정의되지 않은 상태로 유지됩니다.

+5

할당없이 '로컬 결과'를 미리 수행 할 수도 있습니다. – StefanKarpinski

+0

스테판 카르 핀 스크 (StefanKarpinsk)가 더 자세히 설명해 주시겠습니까? 위의 대답을 사용하고 있었지만 for 루프 외부의 초기 정의에 특정 값을 지정하지 않아도됩니다. – lara

+0

@ user3061923 제 답변에 좀 더 자세한 내용을 추가했습니다. 희망이 도움이! – PeterSW