以下内容返回1,表示已创建local x
。
x = 1
bar() = (x = 2)
bar() # 2
x # 1
返回5,表示x指的是全局的。
x = 1
for i = 1:5
x = i
end
x # 5
参考示例:此循环无法更新全局。
x = 10
function foo(n)
for i = 1:n
x = i
end
1
end
foo(2), x # 1, 10
来自@ matt-b的链接非常有用。这实际上是软范围与硬范围see here的结果。总而言之,功能范围用于像循环范围一样工作,直到软范围的引入发生了中断变化。硬范围。文档不是很快。
答案 0 :(得分:1)
如果要在函数范围内使用全局x,则必须将其声明为global
x = 10
function foo(n)
global x
for i = 1:n
x = i
end
1
end
foo(2), x # 2
正如@colinfang评论的那样,在Julia中,函数范围和循环范围的处理方式不同,我认为文档中的以下句子试图解决这个问题:
Julia使用词法范围,这意味着函数的范围不是 继承自其调用者的范围,但是从其范围中继承 功能已定义。
答案 1 :(得分:0)
来自@ matt-b的链接非常有用。这实际上是软范围与硬范围see here的结果。总而言之,功能范围用于像循环范围一样工作,直到软范围的引入发生了中断变化。硬范围。文档不是很快。