我试图在while循环中使用一些全局变量(m,n,r),但是julia 1.0.0告诉我这些变量没有定义。该代码适用于Julia0.7.0,并带有一些警告。这是我正在使用的代码(是的,它写得很糟糕,我希望这不是问题。)为了简单起见,我删除了一个println语句):
m = readline()
n = readline()
m = parse(Int, m)
n = parse(Int, n)
r = m % n
while (r > 0)
println( "m: $(m) n: $(n) r: $(r)" )
r = m % n
m = n
n = r
end这是julia 1.0.0的结果:
ERROR: LoadError: UndefVarError: m not defined
Stacktrace:
[1] top-level scope at euclide.jl:11 [inlined]
[2] top-level scope at ./none:0
[3] include at ./boot.jl:317 [inlined]
[4] include_relative(::Module, ::String) at ./loading.jl:1038
[5] include(::Module, ::String) at ./sysimg.jl:29
[6] exec_options(::Base.JLOptions) at ./client.jl:229
[7] _start() at ./client.jl:421
in expression starting at euclide.jl:10朱莉娅·0.7.0:
┌ Warning: Deprecated syntax `implicit assignment to global variable `r``.
│ Use `global r` instead.
└ @ none:0
┌ Warning: Deprecated syntax `implicit assignment to global variable `m``.
│ Use `global m` instead.
└ @ none:0
┌ Warning: Deprecated syntax `implicit assignment to global variable `n``.
│ Use `global n` instead.
└ @ none:0该代码适用于Julia0.7.0,但为什么它不适用于1.0.0版本呢?
发布于 2018-08-31 20:48:52
您必须声明在全局范围中定义的变量,并将循环中的本地作用域赋值为global,如下所示:
m = readline()
n = readline()
m = parse(Int, m)
n = parse(Int, n)
r = m % n
while (r > 0)
println( "m: $(m) n: $(n) r: $(r)" )
global r = m % n
global m = n
global n = r
end您必须这样做的原因是,while循环引入了一个新的局部范围,因此,如果没有像m = n这样的global关键字赋值,就会告诉朱莉娅m是while循环中的局部变量,所以在行中println( "m: $(m) n: $(n) r: $(r)" ) Julia决定m尚未定义。
还请参阅https://docs.julialang.org/en/latest/manual/variables-and-scoping/和Why does this assignment inside a loop fail in Julia 0.7 and 1.0?,以进一步解释朱莉娅中的范围规则。
https://stackoverflow.com/questions/52122233
复制相似问题