如果我在irb中执行x**2.to_s
,其中x是一个整数,我收到错误消息:
TypeError:无法将字符串强制转换为Fixnum
我猜这是因为代码被解释为x**(2.to_s)
。但是当我搜索一个Ruby运算符优先级的表时,我首先获得了数组访问权,其中指数为第二个。点运算符无处可寻(如果它可以被认为是一个)。我是否对此解释更正,如果是,那么这个行为在哪里定义?
答案 0 :(得分:5)
如果x
整数,则x**2.to_s
为x.**(2.to_s)
。因为存在Fixnum#**
方法。在您的情况下,**
是一种方法,而不是操作员。
在这种情况下,没有运算符优先级和关联性。
在表达式 - x.**(2.to_s)
x
是Fixnum
对象。
**
是一种名为x
的方法。
2.to_s
只是一个表达式,将首先进行评估,并作为参数传递给方法**
。
我的回答是根据你的例子。但Ruby中有几个 edge 个案。只是为了获得这些的味道,请花些时间阅读这个帖子why does a + f b
not parse?。