Я начинаю с Ruby, и, делая несколько тестовых примеров, я наткнулся на ошибку в коде, которую я не понимаю, почему это происходит.
Код претендует на тестирование, если переменная finn определена? () И если она определена, то она увеличивает ее. Если он не определен, он определит его со значением 0 (ноль).
Когда код выдал ошибку, я начал разбивать ее на маленькие части и запускать, чтобы лучше отследить, откуда произошла ошибка.
Код был запущен в IRB irb 0.9.5 (05.04.13), используя ruby 1.9.1p378
Сначала я подтверждаю, что переменная finn еще не определена, и все в порядке:
?> finn
NameError: undefined local variable or method `finn' for main:Object
from (irb):134
from /home/paulo/.rvm/rubies/ruby-1.9.1-p378/bin/irb:15:in `<main>'
>>
Затем я подтверждаю, что следующее встроенное условие выполняется должным образом, и все в порядке:
?> ((defined?(finn)) ? (finn+1):(0))
=> 0
А теперь приходит код, который выдает ошибку:
?> finn=((defined?(finn)) ? (finn+1):(0))
NoMethodError: undefined method `+' for nil:NilClass
from (irb):143
from /home/paulo/.rvm/rubies/ruby-1.9.1-p378/bin/irb:15:in `<main>'
Я ожидал, что код не выдаст никакой ошибки, и что после выполнения переменная finn будет определена с первым значением 0 (ноль). Но вместо этого код выдает ошибку, и finn определяется, но со значением nil.
>> finn
=> nil
Откуда может появиться ошибка?!? Почему встроенное условие работает само по себе, но не при использовании для присваивания финну?
Любая помощь приветствуется:)