Ruby类实例变量vs php属性

时间:2015-10-28 11:33:01

标签: php ruby

在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

1 个答案:

答案 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