( Редактировать : с тех пор DigitalRoss очистил форматирование вопроса, поэтому комментарии о форматировании и первоначальной перезаписи могут больше не применяться. ОП.)
Это почти нечитаемый способ написания метода, и он даже не анализируется на моей машине (Ruby 1.8.7).
Полагаю, вы имеете в виду следующее:
def change_value(value)
@value = value if defined?(value)
end
Это прекрасно работает, когда я звоню, но это неверно. nil
и undefined - два разных зверя в Ruby; value
будет всегда определяться в этом контексте, потому что это объявленный параметр метода. Я подозреваю, что вы действительно после:
def change_value(value)
@value = value unless value.nil?
end
Обратите внимание, что некоторые люди просто пишут это как:
def change_value(value)
@value = value if value
end
потому что nil
это «ложь». Тем не менее, эта форма объединяет nil
и false
, поэтому это не очень хорошая привычка.