“影子”在Ruby中意味着什么?

时间:2011-06-06 23:51:51

标签: ruby shadow

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

$VERBOSE = true
x = 42
5.times{|x| puts x}

我得到了

warning: shadowing outer local variable - x

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

2 个答案:

答案 0 :(得分:48)

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

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

答案 1 :(得分:10)

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