我在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
?
答案 0 :(得分:4)
您还必须重新定义算术运算。
class Dollar < BigDecimal
def + other; Dollar.new(super(other)) end
end