Метод доступа определен, но не работает - PullRequest
0 голосов
/ 14 декабря 2018

У меня есть этот код:

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

, тогда ононе жалуется.Может быть, я что-то упустил, или это просто странное поведение Руби.

1 Ответ

0 голосов
/ 14 декабря 2018

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

Sidenote:

attr_accessor :count - не что иное, как синтаксический сахар для:

def count
  @count
end

def count=(value)
  @count = value
end
...