在 Ruby 中,“shadowing” 是什么意思?

36

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

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

我理解了

warning: shadowing outer local variable - x

可能是因为在块参数中使用了x,同时在块外也使用了变量x,这与“shadowing”有关,但是“shadowing”是什么意思?

2个回答

53

Shadowing(变量屏蔽)是指在同一作用域内有两个不同的本地变量使用相同的名称。通常情况下,内部定义的变量会“屏蔽”外部定义的同名变量,即使外部变量在该作用域内仍然可以被访问。

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


当你有与外部作用域中另一个变量或方法同名的局部变量时,我会改变“当你有两个不同的同名局部变量”的措辞。 - Haris Krajina

10

阴影化是一个更广泛的术语,它不仅适用于Ruby世界。阴影化意味着在外部作用域中使用的名称 - x = 42 被本地变量所“遮盖”,因此使其无法访问和混淆。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接