函数变量不在for循环之外

use*_*579 6 julia

我在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循环之外?

Pet*_*rSW 9

关于变量作用域文档明确指出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.

  • 您也可以事先做"本地结果"而不进行任务. (6认同)