我在julia中有一个泛型函数,目的是说给定维度的向量的成员是否为负数.经过一些变化,我有:
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
Run Code Online (Sandbox Code Playgroud)
如果我运行测试,我发现以下结果:
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
Run Code Online (Sandbox Code Playgroud)
我不知道为什么编译器会告诉我'结果'没有定义.我知道变量存在,但为什么不住在for循环之外?
关于变量作用域的文档明确指出for循环定义了一个新的作用域.result当执行离开for循环时,这意味着超出范围.因此,当你打电话时它是未定义的println(result)
result在for循环之前定义应该给出你期望的行为:
function any(vec)
dim = size(vec)
result = -1
for i in 1:dim[2]
...
Run Code Online (Sandbox Code Playgroud)
或者,如果您不希望分配默认值,并确保for循环将设置其值,您可以执行以下操作:
function any(vec)
dim = size(vec)
local result
for i in 1:dim[2]
...
Run Code Online (Sandbox Code Playgroud)
在第一个例子中,如果for循环没有设置值,result那么-1.
在第二个示例中,不在for循环中设置值将保留resultundefined.