"影子"在Ruby中意味着什么?

And*_*imm 33 ruby shadow

如果我执行以下操作并在Ruby 1.9下打开警告:

$VERBOSE = true
x = 42
5.times{|x| puts x}
Run Code Online (Sandbox Code Playgroud)

我明白了

warning: shadowing outer local variable - x
Run Code Online (Sandbox Code Playgroud)

据推测,这与使用x作为块参数以及块外的变量有关,但"阴影"是什么意思?

sep*_*p2k 49

阴影是指具有两个具有相同名称的不同局部变量.据说内部范围中定义的变量"遮蔽"外部范围中的变量(因为只要内部变量在范围内,外部变量现在就不再可访问,即使它在其他范围内也是如此).

因此,在您的情况下,您无法访问x块中的外部变量,因为您有一个具有相同名称的内部变量.


Tom*_*zyk 10

阴影是更通用的术语,它也适用于Ruby世界之外.阴影意味着您在外部范围中使用的名称 - x = 42被本地"遮蔽",因此使其无法访问和混淆.