Ruby类继承和算术方法

时间:2013-11-30 17:09:51

标签: ruby

我在Ruby中有这个类:

class Dollar < BigDecimal
  def initialize(val = 0)
    super val, 2
  end
end

但是,当我进行算术运算时,类会恢复为BigDecimal。

irb(main):032:0> d = Dollar.new('5')
=> #<BigDecimal:7f12d787bf40,'0.5E1',9(18)>
irb(main):033:0> d.class
=> Dollar
irb(main):034:0> d += Dollar.new('9.99')
=> #<BigDecimal:7f12d786de18,'0.1499E2',18(36)>
irb(main):035:0> d.class
=> BigDecimal

如何在算术运算后将其保持为Dollar

1 个答案:

答案 0 :(得分:4)

您还必须重新定义算术运算。

class Dollar < BigDecimal
  def + other; Dollar.new(super(other)) end
end