Это действительно зависит от кода перед циклом.
Если это все код, то zaz
является блок-локального переменным, а новогоzaz
переменными будет создан каждый раз, когда тело цикла вычисляется.
Если, однако, существует zaz
локальных переменный в окружающем сферы, то zaz
является свободным переменным в блоке, и так как блок в гнездо в областях действий окружающих их области, существующая zaz
переменного вне блока будет повторно назначаемые снова и снова, каждый раз, когда блок оценивается.
Вы можете гарантировать, что zaz
всегда рассматривается как блок локальной переменной и никогда не оглядывались в окружающем объеме, явным образом объявить его как блок локальной переменной в списке параметров блока:
foo.each do |bar; zaz|
zaz = bar.first
end
однако следует отметить, что ваш код имеет смысл только IFF код нечисто и изменяемые:
- Вы присвоить
zaz
, но никогда не использовать его внутри блока. Таким образом, единственный способ, что это имеет смысл вообще, - это то, что zaz
является локальной переменной во внешней области, и вы назначаете ее. Хотя в этом случае весь цикл полностью эквивалентен zaz = foo.last.first
.
each
оценивает блок только для его побочных эффектов. Без побочных эффектов each
не имеет никакого смысла, поэтому тот факт, что вы используете each
, подразумевает, что у вас есть побочные эффекты.
Обратите внимание, что термин «неизменный» без дополнительной квалификации, как правило, относится к значениям. Когда мы говорим о «неизменяемых переменных», мы обычно говорим «неизменяемая переменная» явно, чтобы четко указать, что мы говорим только о том, можно ли перегруппировать переменную, а не об изменении состояния объекта. Или можно просто сказать «постоянный», что является техническим термином «неизменяемой переменной» ... хотя этот термин уже имеет конкретное значение в Ruby.
Мой плохой, я имел в виду переменную zaz не foo. Я уже редактировал вопрос. – Navarro
_ «сделать этот код изменчивым» _ - что вы имеете в виду? 'Array # first' не изменяет массив, и' zaz' никогда не используется. – Stefan
Я не задал вопрос правильно, теперь я его исправил. Просто хотел знать, можно ли считать, что 'zaz' будет неспокойным. В моем реальном коде 'zaz' ссылается, но никогда не изменяется. – Navarro