Подтвердить что ты не робот

Что означает "затенение" в Ruby?

Если я делаю следующее с предупреждениями, включенными под Ruby 1.9:

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

Я получаю

warning: shadowing outer local variable - x

Предположительно, это связано с использованием x в качестве параметра блока, а также переменной вне блока, но что означает "затенение"?

4b9b3361

Ответ 1

Затенение - это когда у вас две разные локальные переменные с тем же именем. Говорят, что переменная, определенная во внутренней области, "затеняет" ту, что находится во внешней области видимости (поскольку внешняя переменная теперь больше не доступна до тех пор, пока внутренняя переменная находится в области видимости, хотя в противном случае она была бы в области видимости).

Итак, в вашем случае вы не можете получить доступ к внешней переменной x в своем блоке, потому что у вас есть внутренняя переменная с тем же именем.

Ответ 2

Тень - более общий термин, он применим и за пределами мира Ruby. Затенение означает, что имя, которое вы используете во внешней области - x = 42, "затенено" локальным, поэтому делает его недоступным и запутанным.