2011-06-06 44 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由本地作品「遮蔽」,因此會導致無法訪問和混淆。