在 Julia 1.0 中,我尝试按照以下方式实现 for 循环:
while t1 < 2*tmax
tcol = rand()
t1 = t0 + tcol
t0 = t1
println(t0)
end
Run Code Online (Sandbox Code Playgroud)
但是,我收到 t1 和 t0 未定义的错误。如果我在它们前面放一个“全局”,它会再次起作用。有没有比在代码中放置全局变量更好的方法来处理这个问题?
问题的原因是您正在全局范围内运行代码(可能在 Julia REPL 中)。在这种情况下,您必须global按照此处的说明使用https://docs.julialang.org/en/latest/manual/variables-and-scoping/。
我可以推荐的最简单的方法是将代码包装在let块中,如下所示:
let t1=0.0, t0=0.0, tmax=2.0
while t1 < 2*tmax
tcol = rand()
t1 = t0 + tcol
t0 = t1
println(t0)
end
t0, t1
end
Run Code Online (Sandbox Code Playgroud)
这种方式let创建了一个本地范围,如果您在全局范围(例如在 Julia REPL 中)运行此块,则一切正常。请注意,我放在t0, t1末尾以使let块返回一个包含t0和值的元组t1
您还可以将代码包装在函数中:
function myfun(t1, t0, tmax)
while t1 < 2*tmax
tcol = rand()
t1 = t0 + tcol
t0 = t1
println(t0)
end
t0, t1
end
Run Code Online (Sandbox Code Playgroud)
然后myfun使用适当的参数调用以获得相同的结果。