我最近一直在用下面的代碼難住了:紅寶石attr_reader和+ =
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
是在表達n += 1
nil
?
使用n = 1 + n
而是提出了一個TypeError
(nil cannot be coerced into Fixnum
),所以n
其實nil
。
FWIW,我不認爲attr_accessor在類中使用是有道理的,也許更好的辦法是在每個地方使用@foo?可能它甚至沒有得到支持。 – Smar