假设我们有一个类红宝石操作和方法调用
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