gpt4 book ai didi

ruby - block 中局部变量的作用域

转载 作者:数据小太阳 更新时间:2023-10-29 06:51:28 24 4
gpt4 key购买 nike

如果我有:

2.times do
i ||= 1
print "#{i} "
i += 1
print "#{i} "
end

我得到了 1 2 1 2,而我期待的是 1 2 2 3。为什么 i 在循环重新开始时丢失了它的赋值?如果赋值发生在循环外,它的行为符合预期,所以我猜它与范围有关,但我没有意识到循环有自己的范围。有人可以澄清一下吗?

更新:感谢您对此的帮助。我的部分困惑源于从 Python 转向 Ruby,Python 没有 block 作用域(我认为)。

最佳答案

我不知道您的期望是基于什么。如果你认为我认为你认为,它应该是 1 2 2 3。您可以通过在 block 外声明变量 i 来实现。

i = nil

2.times do
i ||= 1
print "#{i} "
i += 1
print "#{i} "
end

然后 block 关闭该变量(闭包)并使用它。没有闭包,i 是 block 本地的并且每次都是新的。

关于ruby - block 中局部变量的作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16571731/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com