首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在if语句中使用全局声明(Julia代码)

在if语句中使用全局声明(Julia代码)
EN

Stack Overflow用户
提问于 2019-04-28 10:02:11
回答 1查看 485关注 0票数 1

为什么我声明变量是全局的,而它们在如果else if else块中是相同的?我遗漏了什么?

代码语言:javascript
运行
复制
function f(N)

for n in 0:N
    if n == 0
        fibonacci_n = 0
        fibonacci_n_1 = fibonacci_n
    elseif n == 1
        fibonacci_n = 1
        fibonacci_n_1 = fibonacci_n
        fibonacci_n_2 = fibonacci_n_1
    else
        global fibonacci_n_1, fibonacci_n_2
        fibonacci_n = fibonacci_n_1 + fibonacci_n_2
        fibonacci_n_1 = fibonacci_n
        fibonacci_n_2 = fibonacci_n_1
    end        
    @printf "%5i %10i\n" n fibonacci_n
end

end
EN

回答 1

Stack Overflow用户

发布于 2019-04-28 22:37:30

你的问题并不是关于全局范围,你不需要在这里声明任何全局的东西。如果您希望拥有对全局变量的写访问权限,则global关键字是必需的。

global关键字引入了新全局绑定fibonacci_n_1fibonacci_n_2。将global关键字放在作用域中的什么位置并不重要。甚至可以在函数终止后访问fibonacci_n_1fibonacci_n_2的最后一个值:在全局范围内尝试f(5); println(fibonacci_n_1)

如果删除函数中的global声明,则将在for-loop的本地范围内定义fibonacci_n_1fibonacci_n_2。因此,不会出现全局作用域访问问题。然而,您遇到的问题将是关于循环块中引入的变量的以下行为。

for循环、while循环和理解具有以下行为:在它们的主体范围中引入的任何新变量都是为每次循环迭代新分配的,就像循环体被let块包围一样

https://docs.julialang.org/en/v1/manual/variables-and-scoping/#For-Loops-and-Comprehensions-1

这意味着,如果在for-loop中引入变量,则无法在上一次迭代中访问该变量的值或绑定。这与Python或MATLAB循环中引入的变量的行为不同。

相反,您可以在for循环外部但在函数内部定义此类变量。

代码语言:javascript
运行
复制
function f(N)

fibonacci_n, fibonacci_n_1, fibonacci_n_2 = 0, 0, 0
for n in 0:N
    if n == 0
        fibonacci_n = 0
        fibonacci_n_1 = fibonacci_n
    elseif n == 1
        fibonacci_n = 1
        fibonacci_n_2 = fibonacci_n_1
        fibonacci_n_1 = fibonacci_n
    else
        fibonacci_n = fibonacci_n_1 + fibonacci_n_2
        fibonacci_n_2 = fibonacci_n_1
        fibonacci_n_1 = fibonacci_n
    end        
    @printf "%5i %10i\n" n fibonacci_n
end

end

有关Julia中变量作用域的更多相关讨论,请参阅Julia文档的Scope of Variables部分。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55886418

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档