2016-03-10 57 views
2

在紅寶石中重載運算符的正確方法是什麼? 我需要做些什麼來重新定義如何工作? 當使用+操作符時,此函數未被調用。紅寶石超載+運算符

def +(a,b) 
return a * b 
end 

p 2 + 2 
+3

'2 + 2'不是一個很好的例子來測試'+'和'*'之間的區別 –

+0

我只是試圖表明我想改變+的行爲。我試圖弄清楚如何在+(a,b)函數中着陸。我試圖得到的是除2 + 2以外的任何東西。 – Ravenous

+0

只是好奇:是什麼讓你覺得'+'有兩個參數?對我來說,它似乎非常明顯,它應該只有一個:它畢竟是一個二元運算符,而二元運算符有兩個操作數,這就是爲什麼它們被稱爲「二元」運算符的原因。第一個操作數是'self',顯然,因爲Ruby是OO語言,所以只能有另一個參數。另外,當然,文檔或'+'只會列出一個參數。 –

回答

5

重載操作是基於類的第一個操作數的解決,所以如果你想重載除了簡單的整數,這樣的事情應該工作:

class Fixnum 
    def +(other) 
    return self * other 
    end 
end 

我不建議你實際上做到這一點,順便說一句。

+1

我不打算實際使用這個任何東西。我只是不明白,它是根據第一類來解決的。我只是隨便選了+和*。一旦我看到2 + 2不等於4,我就知道我成功了,並且丟掉了代碼。 – Ravenous