据我了解,当我们在 ruby 中添加两个数字时,会在当前对象上调用“+”方法,并将参数作为下一个对象。
>> 2 + 3
=> 5
>> 2.+(3)
=> 5
这两个示例有何相同之处?我们可以在没有点运算符的情况下调用对象的方法吗?第一个例子是怎么发生的?如果是这种情况,可以 3 是在“+”方法上调用的方法方法吗?(这甚至没有意义)
据我了解,当我们在 ruby 中添加两个数字时,会在当前对象上调用“+”方法,并将参数作为下一个对象。
>> 2 + 3
=> 5
>> 2.+(3)
=> 5
这两个示例有何相同之处?我们可以在没有点运算符的情况下调用对象的方法吗?第一个例子是怎么发生的?如果是这种情况,可以 3 是在“+”方法上调用的方法方法吗?(这甚至没有意义)
Ruby 知道这+
是一个运算符,因为语言的语法是这样说的。还有一个一元运算+
符(转换为+@
method),语言的语法允许 Ruby 知道哪个是哪个。语言定义说运算符被实现为方法调用,并指定每个运算符映射到哪个方法。
您要问的内容与询问如何以with作为参数o.m a
调用m
方法相同。Ruby 的语法和语义就是这样定义的。o
a
即使在理论数学中,运算符也是函数。该a + b
符号实际上只是一个方便的符号+(a, b)
(例如+
:R 2 → R或从R × R到R的函数)。我认为您对符号的阅读过多并认为运算符是特殊的,它们不是,它们只是计算机语言和数学中的函数调用。
简而言之,它之所以有效,是因为 Ruby 就是这样定义的。
据,直到...为止
3 可以是在“+”方法上调用的方法方法吗?
而言,3
是Fixnum 对象上的方法的参数或参数。+
2
a + b 只是 a.+(b) 的糖语法。在 ruby 中,几乎所有东西都是一个对象,甚至“运算符”实际上也是一个数字的方法。没有比糖语法更神奇的了。