Ruby运算符和方法调用

时间:2014-01-26 20:06:02

标签: ruby operator-overloading

假设我们有一个班级

class Foo
  def +   (element); end
  def add (element); end
end

现在我们可以调用这两个方法,如:

foo = Foo.new
foo.+('bar')
foo.add('bar')

这是合理的。这是调用方法的正确方法。

我的问题是:为什么我们可以这样做:

foo + 'bar'

但不是:

foo add 'bar'

Ruby是否区分方法名称是否实际上是运算符重载?它是如何工作的?

2 个答案:

答案 0 :(得分:0)

这是许多人称之为Ruby的语法糖的事情之一。该语言识别这些数学运算符以及其他ASCII符号运算符,例如<<插入运算符,并允许使用空格调用它们而不使用方法点。这允许更自然地使用该方法。

Ruby无法将您的#add方法识别为标准运算符,因此不会执行此语法帮助。

答案 1 :(得分:0)

Ruby将特定的方法名称视为不同的(子集)运算符。它们可以在没有点.的情况下调用,可以添加到拥有对象(不需要参数,即一元运算符),并且具有与标准方法不同的优先顺序。

Here是具体“运算符”方法的固定列表,它们不是关键字,可以定义或重载(用Y标记)。