2011-06-06 23 views
31

Ben uyarılarla aşağıdaki Ruby 1.9 altında açık yoksa:Ruby'de "gölgeleme" ne anlama geliyor?

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

Ben

warning: shadowing outer local variable - x 

Tahminen bir blok parametresi yanısıra dışında bir değişken olarak x kullanılarak ilgisi var olsun blok, ama "gölge" ne anlama geliyor?

cevap

45

Gölge, aynı ada sahip iki farklı yerel değişkeniniz olduğunda. İç kapsamda tanımlanan değişkenin, dış alandaki "gölgeleri" ifade ettiği söylenir (çünkü dış değişken, kapsam dahilinde olduğu sürece, dış değişken artık kapsam dahilinde olduğu sürece artık erişilebilir değildir).

Sizin durumunuzda, , bloğunuzdaki dış x değişkenine erişemezsiniz, çünkü aynı ada sahip bir iç değişkeniniz vardır.

+0

"Aynı ada sahip iki farklı yerel değişkeniniz olduğunda" ifadesini değiştiririm. "Dış kapsamda başka bir değişken veya yöntemle aynı ada sahip yerel değişkeniniz varsa" satırlarında bir şeyler yapmak. –

10

Gölgeleme daha genel bir terimdir, Ruby dünyasının dışında da uygulanabilir. Gölgeleme, bir dış kapsamda kullandığınız adın - x = 42, yerel tarafından "gölgeli" olduğu anlamına gelir, bu nedenle erişilemeyen ve kafa karıştırıcı hale getirir.