Ruby运算符优先级

时间:2014-04-02 18:52:14

标签: ruby

如果我在irb中执行x**2.to_s,其中x是一个整数,我收到错误消息:

  

TypeError:无法将字符串强制转换为Fixnum

我猜这是因为代码被解释为x**(2.to_s)。但是当我搜索一个Ruby运算符优先级的表时,我首先获得了数组访问权,其中指数为第二个。点运算符无处可寻(如果它可以被认为是一个)。我是否对此解释更正,如果是,那么这个行为在哪里定义?

1 个答案:

答案 0 :(得分:5)

如果x 整数,则x**2.to_sx.**(2.to_s)。因为存在Fixnum#**方法。在您的情况下,**是一种方法,而不是操作员。

在这种情况下,没有运算符优先级和关联性

在表达式 - x.**(2.to_s)

  • xFixnum对象。

  • **是一种名为x的方法。

  • 2.to_s只是一个表达式,将首先进行评估,并作为参数传递给方法**

我的回答是根据你的例子。但Ruby中有几个 edge 个案。只是为了获得这些的味道,请花些时间阅读这个帖子why does a + f b not parse?