在php中,我可能会有这样一个类:
class Item
public $quality = 10
public function reduceQuality()
{
$this->quality -= 1;
}
}
$item = new Item;
$item->reduceQuality();
print $item->quality; // outputs 9
我如何在红宝石中实现相似性?我有类似的东西:
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
属性可以继承或覆盖?
e.g。
class SuperItem < Item
@quality = 50
end
答案 0 :(得分:2)
在初始值设定项中设置值。
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