UndefVarError in Julia 在 for 循环中评估条件时



作为学习 Julia 的初学者,我使用以下代码来获取数组中的最小数字;

smallest = 100000
array = [2, 34, 5, 67, 8]
for i in array
if i < smallest
smallest = i
end
end
println(smallest)

我可以在 Python 中成功运行类似的代码,但是当我在 Julia 中运行时,它会抛出一个错误:

ERROR: LoadError: UndefVarError: smallest not defined

我是否缺少 Julia 中的 for 循环语法?

for语法是正确的,但由于您在循环中引入了一个新作用域,为了分配给smallest您需要指示您正在尝试设置全局变量smallest

for i in array
if i < smallest
global smallest = i
end
end

这种行为(需要指示global(在 Julia 1.5 中消失了,因为人们(就像这里一样!(在刚开始时发现它很棘手。

SoftGlobalScope包的自述文件对此处的范围界定进行了非常温和的介绍。官方手册中有关范围界定的更详细文档。

这里还有一个关于SO的类似问题和答案,它引用了手册(上面链接(,描述了为什么范围规则最初是这样设置的(即1.5之前的方式(:

避免更改全局变量的值被许多人认为是编程的最佳实践。其中一个原因是,远程更改其他模块中全局变量的状态应该小心,因为它会使程序的局部行为难以推理。这就是为什么引入局部作用域的作用域块需要 global 关键字来声明修改全局变量的意图。

最新更新