【问题标题】:What happens when we use operators in ruby当我们在 ruby​​ 中使用运算符时会发生什么
【发布时间】:2011-12-17 17:10:23
【问题描述】:

据我了解,当我们在 ruby​​ 中添加两个数字时,会在当前对象上调用“+”方法,并将参数作为下一个对象。

>> 2 + 3
=> 5



>> 2.+(3)
=> 5

这两个例子有什么相同之处?我们可以在没有点运算符的情况下调用对象的方法吗?第一个例子是怎么发生的?如果是这种情况,可以 3 是在“+”方法上调用的方法方法吗? (这甚至没有意义)

【问题讨论】:

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


    【解决方案1】:

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

    您的问题与询问o.m a 如何以a 作为参数调用o 上的m 方法相同。 Ruby 的语法和语义就是这样定义的。

    即使在理论数学中,运算符也是函数。 a + b 表示法实际上只是 +(a, b) 的一种方便表示法(其中 +:R2R 或来自R×RR,例如)。我认为您对符号的阅读过多,并认为运算符是特殊的东西,它们不是,它们只是计算机语言和数学中的函数调用。

    简而言之,它之所以有效,是因为 Ruby 就是这样定义的。

    至于

    可能 3 是在 '+' 方法上调用的方法方法吗?

    关注,3 是 Fixnum 对象2 上的+ 方法的参数参数

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2015-06-01
        • 2012-12-07
        • 1970-01-01
        • 2011-03-22
        • 1970-01-01
        • 1970-01-01
        • 2017-01-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多