假设我们有一个班级
class Foo
def + (element); end
def add (element); end
end
现在我们可以调用这两个方法,如:
foo = Foo.new
foo.+('bar')
foo.add('bar')
这是合理的。这是调用方法的正确方法。
我的问题是:为什么我们可以这样做:
foo + 'bar'
但不是:
foo add 'bar'
Ruby是否区分方法名称是否实际上是运算符重载?它是如何工作的?
答案 0 :(得分:0)
这是许多人称之为Ruby的语法糖的事情之一。该语言识别这些数学运算符以及其他ASCII符号运算符,例如<<
插入运算符,并允许使用空格调用它们而不使用方法点。这允许更自然地使用该方法。
Ruby无法将您的#add
方法识别为标准运算符,因此不会执行此语法帮助。
答案 1 :(得分:0)
Ruby将特定的方法名称视为不同的(子集)运算符。它们可以在没有点.
的情况下调用,可以添加到拥有对象(不需要参数,即一元运算符),并且具有与标准方法不同的优先顺序。
Here是具体“运算符”方法的固定列表,它们不是关键字,可以定义或重载(用Y标记)。