scope - 封装在函数中的全局变量

标签 scope julia scoping

作为经济学博士学位的一部分,我正在学习 Julia,但我遇到了一个对我来说没有意义的问题。我正在尝试编写一个函数来执行一些初步计算,然后进行 while 循环并返回一些值。我想在不使用全局变量的情况下执行此操作。由于某种原因我无法让它工作。请参阅下面的最小工作示例,该示例返回 z 的 undefined variable 错误。

function test_me(n)
x = 2 + 1
y = x - 1 
i = y
while i <= n 
    println(i)
    i += 1
    z = 3*i
end 
return z 
end 

我可以通过将 z 设为全局变量来轻松解决问题。

function test_me2(n)
x = 2 + 1
y = x - 1 
i = y
while i <= n 
    println(i)
    i += 1
    global z = 3*i
end 
return z 
end 

我很困惑,因为我的印象是,将 while 循环包装在函数中意味着 z 位于本地范围内,并且全局声明是不必要的。例如,下面的代码按预期工作。

function test_me3(n)
i = 1
while i <= n 
    println(i)
    i += 1
    z = 3*i
end 
return z 
end

如果这个问题微不足道,我深表歉意。非常感谢任何帮助。谢谢。

最佳答案

只需在 while 循环之前放置一个 local z 或一个 z = 0 即可,以便在循环中定义 z

有关此内容的更多信息,请查看 scoping page of the Julia documentationlocal keyword docstring .

另请参阅此问题/答案:In Julia, is there a way to pass a variable from a local scope to the enclosing local scope?

关于scope - 封装在函数中的全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59015383/

相关文章:

Javascript OOP 公共(public)和私有(private)变量范围

java - 为什么我不能从 Java 中的内部 Thread 类访问外部类?

julia - DF 的第一行作为列名称

php - CSS 中的命名空间/作用域

javascript - 在另一个对象内部传递对象引用

javascript - AngularJS 没有用范围内的动态数据替换表达式?

c++ - 在命名空间中转发声明类

julia - 如何在 Julia 中规范化矩阵的列

c++ - 将 double 组转换为仅具有 double 成员的结构数组而不复制数据

r - 有什么方法可以访问由 makeActiveBinding 安装的函数?