2014-04-01 87 views
4

我在茱莉亞有一個通用函數,目的是說如果給定維度的向量的成員是否定的。一些變化之後,我有:函數變量不居住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循環定義了一個新的作用域。這意味着result在執行離開for循環時超出了範圍。因此,它是不確定的,當你調用println(result)

定義result前進中的for循環應該給的行爲你期望:

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

或者,如果你不希望指定一個默認值,並且確定for循環將其值設置,你可以這樣做:

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

在第一個例子,如果for循環不設置值,result-1

在第二個示例中,未在for循環中設置值將使result未定義。

+5

你也可以事先沒有分配地做'local result'。 – StefanKarpinski

+0

StefanKarpinsk你能解釋一下你的意思嗎?我一直在使用上面的答案,但是我想停止爲for循環之外的初始定義分配一個特定的值。 – lara

+0

@ user3061923我在回答中添加了一些更多細節。希望這可以幫助! – PeterSW