2011-06-06 47 views
31

如果我这样做有警告下面的Ruby 1.9下开启:Ruby中的“阴影”是什么意思?

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

我得到

warning: shadowing outer local variable - x 

想必这是用X作为块参数以及外部的变量做块,但是“阴影”是什么意思?

回答

45

当您有两个具有相同名称的不同局部变量时,会产生阴影。据说内部作用域中定义的变量“隐藏”了外部作用域中的变量(因为只要内部变量在作用域中,外部变量现在不再可访问,即使它在范围内)。

你的情况

所以,您无法访问您的块外x变量,因为你有相同名称的内部变量。

+0

我会改变“当你有两个不同的同名本地变量”的措辞。以“当您具有与另一个变量或外部作用域中的方法相同的名称的局部变量”作为行时。 – 2014-01-13 13:00:00

10

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