在Julia 1.0中,我正在尝试实现以下形式的for循环:
while t1 < 2*tmax
tcol = rand()
t1 = t0 + tcol
t0 = t1
println(t0)
end
但是,我得到的错误是t1和t0未定义。如果我将“全局”放在它们前面,它将再次起作用。有比通过在我的代码中放置全局变量更好的方法来解决此问题吗?
答案 0 :(得分:2)
问题的原因是您正在全局范围内运行代码(可能在Julia REPL中)。在这种情况下,您将必须按照https://docs.julialang.org/en/latest/manual/variables-and-scoping/所述使用@OneToOne(fetch = FetchType.LAZY, optional = false)
。
我推荐的最简单的方法是将您的代码包装在global
块中,如下所示:
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
创建一个本地范围,如果您在全局范围内运行此块(例如在Julia REPL中),则一切正常。请注意,我将let
放在最后,以使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
以获得相同的结果。