gpt4 book ai didi

ruby - block 局部变量的存在只是为了提高可读性吗?

转载 作者:太空宇宙 更新时间:2023-11-03 16:25:14 25 4
gpt4 key购买 nike

block 局部变量是为了防止 block 篡改其范围之外的变量。

使用 block 局部变量

x = 10
3.times do |y; x|
x = y
end
x # => 10

但这很容易通过声明一个常规 block 参数来完成。为该参数创建一个新的本地范围,它优先于以前的变量/范围。

不使用 block 局部变量

x = 10
3.times do |y, x|
x = y
end
x # => 10

block 外的变量 x 在这两种情况下都不会改变。除了增强可读性之外,是否还需要 block 局部变量?

最佳答案

block 参数是一个真正的参数,而 block 局部变量不是。

如果你给 yield 两个这样的参数:

def foo
yield("hello", "world")
end

打电话

x = 10
foo do |y; x|
puts x
end

x 在函数内部是nil,因为只有第一个参数赋值给了y,第二个参数被丢弃。

打电话

x = 10
foo do |y, x|
puts x
end
#=>world

x 正确获取参数为 "world"

关于ruby - block 局部变量的存在只是为了提高可读性吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26133002/

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