当我们在ruby中使用运算符时会发生什么

时间:2011-10-29 03:08:00

标签: ruby operators operator-overloading anonymous-methods addition

据我所知,当我们在ruby中添加两个数字时,在当前对象上调用'+'方法,并将参数作为下一个对象。

>> 2 + 3
=> 5



>> 2.+(3)
=> 5

这两个例子如何相同,我们可以在没有点运算符的情况下调用对象上的方法?它是如何在第一个例子中发生的?如果是这种情况,那么3可以是一个叫做'+'方法的方法吗? (它甚至没有意义)

2 个答案:

答案 0 :(得分:4)

Ruby知道+是一个运算符,因为语言的语法是这样的。还有一个一元+运算符(转换为+@ method),语言的语法允许Ruby知道哪个是哪个。语言定义表示运算符是作为方法调用实现的,并指定每个运算符映射到的方法。

您所询问的内容与询问o.m a m方法o方法a如何a + b +(a, b)作为参数的方式相同。这就是Ruby的语法和语义的定义。

操作员甚至在理论数学中也是一种功能。 +符号实际上只是3的便捷表示法(其中+ R 2 R 或从 R × R R 的函数,例如)。我认为你正在阅读过多的注释并认为运算符是特殊的,它们不是,它们只是计算机语言和数学中的函数调用。

简而言之,它起作用的原因在于Ruby的定义是如何工作的。

至于

  

3可以是一个名为'+'方法的方法吗?

2是Fixnum对象{{1}}上{{1}}方法的参数参数

答案 1 :(得分:1)

a + b只是。+(b)的糖语法。在ruby中,几乎所有东西都是一个对象,甚至“运算符”也是一个数字的方法。没有比糖语法更神奇了。