Ruby中如何重载+运算符?

3

在Ruby中,重载运算符的正确方法是什么? 要重新定义+的工作方式,我需要做什么? 当使用+运算符时,此函数未被调用。

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

p 2 + 2 

3
“2 + 2”不是测试“+”和“*”之间区别的好例子。 - Sagar Pandya
我只是想表明我想改变+的行为。我试图找出如何进入+(a,b)函数。我所尝试的就是从2 + 2中得到除4以外的任何东西。 - Ravenous
只是好奇:你为什么认为 + 有两个参数?对我来说,它显然只应该有一个:毕竟它是一个二元运算符,而二元运算符有两个操作数,这就是为什么它们被称为“二元”运算符的原因。显然,第一个操作数是 self,因为 Ruby 是一种面向对象的语言,所以只能有另一个参数。当然,+ 的文档只列出了一个参数。 - Jörg W Mittag
1个回答

6

重载运算符的解析是基于第一个操作数所属的类,因此如果您想要重载简单整数的加法,可以尝试以下方式:

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

顺便说一下,我不建议您实际这样做。


1
我并不打算真正用这个做什么。我只是没有理解它是基于一等公民解决的。我随意选择了 + 和 *。一旦我看到 2 + 2 不等于 4,我就知道我成功了,然后我扔掉了代码。 - Ravenous

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接