定义了访问器方法,但不起作用

时间:2018-12-14 10:56:07

标签: ruby attr-accessor

我有此代码:

class A
  attr_accessor :count

  def initialize
    @count = 0
  end

  def increase_count
    count += 1
  end
end

A.new.increase_count

它抱怨:

in `increase_count': undefined method `+' for nil:NilClass (NoMethodError)

如果我将increase_count的定义更改为:

class A
  def increase_count
    @count += 1
  end
end

那么它不会抱怨。可能是我缺少了某些东西,或者仅仅是Ruby的怪异行为。

1 个答案:

答案 0 :(得分:11)

A#count=要求显式接收者作为所有foo=方法。否则,将创建并提升局部变量count,并使用尚未初始化的局部变量使count + 1

class A
  attr_accessor :count
  def initialize
    @count = 0
  end

  def increase_count
  # ⇓⇓⇓⇓⇓ THIS 
    self.count += 1
  end
end

puts A.new.increase_count   
#⇒ 1

边注:

attr_accessor :count只是以下方面的语法糖:

def count
  @count
end

def count=(value)
  @count = value
end