I';我得到了以下错误:“quot;顶级范围位于./REPL[1]:4“;当我运行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,告诉其后

这是我试图在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
,但请注意,全局变量具有自己的性能rmance警告。一个可能更好的解决方案是使用
let
而不是
begin
,这确实引入了一个新的作用域,但请注意,之后您当然不能访问
i
,因为它现在只是
let
块的局部

在即将发布的Julia 1.5中,这种行为实际上会发生改变,因此您的代码应该可以正常工作。

您的问题是。当您进入循环时,在循环中创建的变量是循环的本地变量,并在循环退出后被销毁。
i
当前未在while循环中定义,因此您会得到错误。快速fix是告诉Julia,您希望循环通过在while语句之后立即添加
global i
来访问您在顶部定义的global
i
变量。您也不需要begin块,并且定义
i
的下一条语句会立即覆盖命名块
i