假設我們有一個類紅寶石操作和方法調用
class Foo
def + (element); end
def add (element); end
end
現在,我們可以調用像這兩種方法:
foo = Foo.new
foo.+('bar')
foo.add('bar')
這就是合理的。這是調用方法的正確方法。
我的問題是:爲什麼我們可以這樣做:
foo + 'bar'
但不是:
foo add 'bar'
是否紅寶石區分,如果方法的名稱實際上是運算符重載?它是如何工作的?
不是一個壞問題! +1 –
Ruby將表示運算符的字符串與其他字符串區分開來。所以當你做'def +'時,它知道你正在定義(或超載)一個現有的操作符。由於'add'不是一個操作符,因此它被視爲一種常規方法。您可以使用gem來定義自定義運算符,如下所述:http://stackoverflow.com/questions/11874579/define-custom-ruby-operator – lurker
mbratch,我想接受您的問題! – squixy