如果我在 Ruby 1.9 下打开警告后执行以下操作:
$VERBOSE = true
x = 42
5.times{|x| puts x}
我理解了
warning: shadowing outer local variable - x
可能是因为在块参数中使用了x,同时在块外也使用了变量x,这与“shadowing”有关,但是“shadowing”是什么意思?
Shadowing(变量屏蔽)是指在同一作用域内有两个不同的本地变量使用相同的名称。通常情况下,内部定义的变量会“屏蔽”外部定义的同名变量,即使外部变量在该作用域内仍然可以被访问。
因此,在您的情况下,您无法在代码块中访问外部的 x
变量,因为您有一个同名的内部变量。
阴影化是一个更广泛的术语,它不仅适用于Ruby世界。阴影化意味着在外部作用域中使用的名称 - x = 42
被本地变量所“遮盖”,因此使其无法访问和混淆。