Недавно меня озадачил следующий код:
class Foo
attr_accessor :n
def initialize(i)
@n = i
end
def val
n
end
def bump!
n += 1
end
end
f = Foo.new(0)
puts f.val
f.bump!
puts f.val
завершается успешно и выводит 0
, как и ожидалось. f.bump!
вызывает следующее NoMethodError
foo.rb:13:in `bump!': undefined method `+' for nil:NilClass (NoMethodError)
from foo.rb:20:in `<main>'
Любая идея, почему n
является nil
в выражении n += 1
?
Использование вместо этого n = 1 + n
вызывает TypeError
(nil cannot be coerced into Fixnum
), так что n
на самом деле равно nil
.