gpt4 book ai didi

ruby - block 中的局部变量

转载 作者:数据小太阳 更新时间:2023-10-29 07:43:47 26 4
gpt4 key购买 nike

在这个例子中

x = 1

foo = lambda do
x = 2
end

foo.call

foo 会改变 x 的值。是否可以隐藏 x 的值,使其在 proc 调用前后保持不变?

最佳答案

block 局部变量

我同意,如果您不知道确切的术语,则搜索起来不是很方便。给你:

x = 1

foo = lambda do
x = 2
end

foo.call

p x # => 2

x = 1

foo = lambda do |;x|
x = 2
end

foo.call

p x # => 1

它从 Ruby 1.9 开始可用,但我不经常遇到它(如果有的话)。它描述了here ,它被称为“ block 局部变量”或“ block 局部参数”:

You may also declare block-local arguments to a block using ';' in the block arguments list. Assigning to a block-local argument will not override local arguments outside the block in the caller's scope

备选

@EliSadoff 和@tadman 在评论中提出了一个非常有效的观点。

这些 block 局部变量不经常使用是有充分理由的:在 block 中隐藏外部变量通常不是一个好主意。这可能会使代码更难阅读、更难理解和更难使用。

对于 Ruby block ,外部变量和 block 变量通常相关,但不等同:

  • filename 作为外部变量,file 作为带有 IO.open 的 block 变量
  • array 作为外部变量,element 作为带有 Array#each 的 block 变量
  • strings 作为外部变量,string 作为带有 Array#map 的 block 变量

如果你需要 bound variable并且 x 已经用作外部变量,只需使用 yizm n任何

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

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