2014-04-01 79 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