Учитывая следующий метод:
def some_method
:value
end
Следующие утверждения работают так, как я ожидал:
some_method || :other
# => :value
x = some_method || :other
# => :value
Но поведение следующего утверждения озадачивает меня:
some_method = some_method || :other
# => :other
Создает локальную переменную с именем some_method
, как и ожидалось, и последующие вызовы some_method
возвращают значение этой локальной переменной. Но почему он присваивает :other
, а не :value
?
Я понимаю, что это, вероятно, не очень разумно, и могу видеть, как это может быть неоднозначно, но я подумал, что правая часть назначения должна быть оценена до того, как назначение будет рассмотрено ...
Я тестировал это в Ruby 1.8.7 и Ruby 1.9.2 с одинаковыми результатами.
Ура!
Пол