“outer”关键字,Juliafor循环变量作用域

我想使用 for 循环来实现迭代方法。在循环结束时,我还想检查是否max_iter达到:

function iterative_method()

    iter_max = 10

    for iter in 1:iter_max 
        # some computations
        # ...
        # if converged 
        #    break
        # end
    end

    @assert iter!=iter_max "max iteration = $iter_max reached!"

end

不幸的是,@assert无法正常工作iter

julia> iterative_method()
ERROR: UndefVarError: iter not defined

问题:如何使iterfor循环块外可见?

回答

解决方案是outer按照官方文档中的描述使用:Loops-and-Comprehensions

function iterative_method()

    iter_max = 10

    local iter                           # <- declare "iter" variable
    for outer iter in 1:iter_max         # <- use "outer" keyword
        # some computations
        # ...
        # if converged 
        #    break
        # end
    end

    @assert iter!=iter_max "max iteration = $iter_max reached!"

end

现在按预期工作:

julia> iterative_method()
ERROR: AssertionError: max iteration = 10 reached!

但是,Julia 核心开发人员对添加此功能表示遗憾,并且可能会在 Julia 2.0 中将其删除,因此使用以下稍微冗长的版本来表达这一点可能更清晰、更简单:

function iterative_method()

    iter_max = 10

    local iter
    for i in 1:iter_max
        iter = i
        # some computations
        # ...
        # if converged 
        #    break
        # end
    end

    @assert iter!=iter_max "max iteration = $iter_max reached!"

end


以上是“outer”关键字,Juliafor循环变量作用域的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>