Ruby运算符优先级

Zac*_*Gao 1 ruby

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

TypeError:String无法强制转换为Fixnum

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

Aru*_*hit 5

如果x整数,则x**2.to_sx.**(2.to_s).因为Fixnum#**方法存在.在你的情况下**是一个方法,而不是一个运算符.

在这种情况下,不存在运算符优先级和关联性.

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

  • xFixnum对象.

  • **是一种叫做的方法x.

  • 2.to_s只是一个表达式,它将首先被计算,并作为参数传递给方法**.

我的答案就是你的例子.但Ruby中有几个边缘情况.只是为了得到那些的味道,给一些时间来阅读这个线程为什么不a + f b解析?.