在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