2011-06-06 41 views
31

Si yo lo siguiente con advertencias activada bajo Ruby 1.9:¿Qué significa "sombra" en Ruby?

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

consigo

warning: shadowing outer local variable - x 

Es de suponer que tiene que ver con el uso de x como parámetro de bloque, así como una variable fuera de la bloquear, pero ¿qué significa "sombra"?

Respuesta

45

Sombreado es cuando tiene dos variables locales diferentes con el mismo nombre. Se dice que la variable definida en el alcance interno "sombrea" la que está en el ámbito externo (porque la variable externa ya no es accesible mientras la variable interna esté dentro del alcance, aunque de otro modo estaría dentro del alcance).

En su caso, no puede acceder a la variable externa x en su bloque, porque tiene una variable interna con el mismo nombre.

+0

Cambiaría la redacción de "cuando tenga dos variables locales diferentes con el mismo nombre". A algo en líneas de "cuando tienes variable (s) local (es) con el mismo nombre que otra variable o método en el ámbito externo". –

10

Sombreado es un término más general, es aplicable fuera del mundo de Ruby también. Sombreado significa que el nombre que utiliza en un ámbito externo - x = 42 es "sombreado" por el local, por lo tanto hace que sea no accesible y confuso.