循环更改变量[Julia]

时间:2018-08-18 14:48:27

标签: julia

在Julia 1.0中,我正在尝试实现以下形式的for循环:

while t1 < 2*tmax
    tcol = rand()
    t1 = t0 + tcol

    t0 = t1
    println(t0)
end

但是,我得到的错误是t1和t0未定义。如果我将“全局”放在它们前面,它将再次起作用。有比通过在我的代码中放置全局变量更好的方法来解决此问题吗?

1 个答案:

答案 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块返回一个包含lett0

值的元组

您还可以将代码包装在一个函数中:

t1

,然后使用适当的参数调用function myfun(t1, t0, tmax) while t1 < 2*tmax tcol = rand() t1 = t0 + tcol t0 = t1 println(t0) end t0, t1 end 以获得相同的结果。