+ = перегрузка оператора в ruby - PullRequest
0 голосов
/ 12 января 2020
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 Ответ

3 голосов
/ 12 января 2020

Невозможно переопределить = или такие варианты, как +=. Это встроенные ключевые слова, а не методы , такие как +.

Если вы измените свой патч с def +=(obj) на def +(obj), вы все равно можете вызвать r1 += r2, и он будет имеют такой же эффект, как если бы вы исправили +=. Это связано с тем, что += вызывает скрытый метод + изнутри.

Кстати, ваш метод + на самом деле не возвращает значение, поэтому каждый раз, когда вы вызываете +=, он будет всегда приводит к нулю .... но кажется, что это все еще WIP, так что, надеюсь, вы сможете разобраться с этим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...