+ =红宝石中的运算符重载

时间:2020-01-12 07:58:05

标签: ruby

class Fracpri
attr_accessor:whole, :numer, :denom, :dec, :flofrac
def initialize()
    puts "Hey! It's an empty constructor"
end
def getFraction(whole,numer,denom)
    @whole=whole
    @numer=numer
    @denom=denom
end
def showFraction
    puts "#{whole} #{numer}/#{denom}"
end
def +=(obj)
    if(self.whole+(self.numer.to_f/self.denom.to_f) < obj.whole+(obj.numer.to_f/obj.denom.to_f))
        puts "Yes"
    else
        puts "No"
    end
end

end
puts "10 question"
r3=Fracpri.new()
r3.getFraction(1,2,3)
r2=Fracpri.new()
r2.getFraction(4,6,5)
r1=Fracpri.new()
r1.getFraction(2,6,5)
r1 += r2

这是我收到的错误消息:

syntax error, unexpected '=', expecting ';' or '\n'

    def +=(obj)
          ^

 syntax error, unexpected keyword_end, expecting end-of-input

建议我如何纠正此错误,以便我可以执行重载,我需要使用“ + =“运算符

添加一个常量

1 个答案:

答案 0 :(得分:3)

无法覆盖=,也不能覆盖+=之类的变体。这些是内置关键字,而不是诸如+之类的方法

如果您将补丁程序从def +=(obj)更改为def +(obj),您仍然可以调用r1 += r2,其效果与修补+=相同。这是因为+=在后​​台调用了已修补的+方法。

顺便说一句,您的+方法实际上并不返回任何值,因此任何时候调用+=都将始终为nil ....但是看来这仍然是WIP所以希望您可以解决这一点。

相关问题