I';我得到了以下错误:“quot;顶级范围位于./REPL[1]:4“;当我运行julia程序时
这是我试图在Julia中执行的代码:I';我得到了以下错误:“quot;顶级范围位于./REPL[1]:4“;当我运行julia程序时,julia,Julia,这是我试图在Julia中执行的代码: i = begin i = 5 while(i<=10) println(i) i+=1 end end i=begin i=5 while(i你在REPL中吗?你可能遇到的是begin没有引入它自己的作用域,因此i=5将i声明为一个全局变量。因为while引入它自己的作用域,如果你引入println(i),它只在其未定义的局部范围内查找i,因为i仅作为全局变量存在。您可以在while循环体的开头添加一行global i,告诉其后
i = begin
i = 5
while(i<=10)
println(i)
i+=1
end
end
i=begin
i=5
while(i你在REPL中吗?你可能遇到的是begin
没有引入它自己的作用域,因此i=5
将i
声明为一个全局变量。因为while
引入它自己的作用域,如果你引入println(i)
,它只在其未定义的局部范围内查找i
,因为i
仅作为全局变量存在。您可以在while循环体的开头添加一行global i
,告诉其后的所有代码使用全局i
,但请注意,全局变量具有自己的性能rmance警告。一个可能更好的解决方案是使用let
而不是begin
,这确实引入了一个新的作用域,但请注意,之后您当然不能访问i
,因为它现在只是let
块的局部
在即将发布的Julia 1.5中,这种行为实际上会发生改变,因此您的代码应该可以正常工作。您的问题是。当您进入循环时,在循环中创建的变量是循环的本地变量,并在循环退出后被销毁。i
当前未在while循环中定义,因此您会得到错误。快速fix是告诉Julia,您希望循环通过在while语句之后立即添加global i
来访问您在顶部定义的globali
变量。您也不需要begin块,并且定义i
的下一条语句会立即覆盖命名块i