Ruby类实例变量与php属性


Ruby class instance variables vs php properties

在php中,我可能有一个这样的类:

class Item
    public $quality = 10
    public function reduceQuality()
    {
        $this->quality -= 1;
    }
}
$item = new Item;
$item->reduceQuality();
print $item->quality; // outputs 9

我如何在ruby中实现类似的功能?我有这样的东西:

class Item
    attr_reader :quality
    @quality = 10
    def reduce_quality()
        @quality -= 1
    end
end
item = Item.new
item.reduce_quality # `reduce_quality': undefined method `-' for nil:NilClass (NoMethodError)
item.quality 

我知道Ruby有实例变量和类变量。我试图在创建对象时在对象上定义一个实例变量。考虑到我可能会扩展类,并且我希望quality属性是继承的或可重写的,这样做的最佳实践是什么?

例如

class SuperItem < Item
    @quality = 50
end

在初始值设定项中设置值。

class Item
  attr_reader :quality
  def initialize
    @quality = default_quality
  end
  def reduce_quality
    @quality -= 1
  end
  def default_quality
    1
  end
end
class SuperItem < Item
  def default_quality
    50
  end
end