Ruby, niveau de pile trop profond (SystemStackError)

J'ai le code suivant:

class BookPrice
  attr_accessor :price
  def initialize(price)
    @price = price
  end
  def price_in_cents
    Integer(price*100 + 0.5)
  end
end

b = BookPrice.new(2.20)
puts b.price_in_cents

Tout cela fonctionne bien et produit 220. Mais quand j'ai remplacer la deuxième ligne attr_accessor :prix avec:

def price
  @price = price
end

Je reçois niveau de la pile trop profonde (SystemStackError) erreur. Ce qui se passe? Je sais que je peux remplacer Entier(prix*100 + 0,5) avec @prix, au lieu de l'appel de la méthode des prix, mais je veux garder la façon dont il est pour la programmation orientée objet raisons. Comment puis-je rendre ce code fonctionne de la façon dont il est sans attr_accessor?

source d'informationauteur daremkd | 2013-09-29