据我所知,当我们在ruby中添加两个数字时,在当前对象上调用'+'方法,并将参数作为下一个对象。
>> 2 + 3
=> 5
>> 2.+(3)
=> 5
这两个例子如何相同,我们可以在没有点运算符的情况下调用对象上的方法?它是如何在第一个例子中发生的?如果是这种情况,那么3可以是一个叫做'+'方法的方法吗? (它甚至没有意义)
答案 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中,几乎所有东西都是一个对象,甚至“运算符”也是一个数字的方法。没有比糖语法更神奇了。