为什么Ruby` **`运算符的优先级高于一元`-`?

时间:2012-11-11 06:26:01

标签: ruby operator-keyword operator-precedence

这会导致如下情况:

-1 ** 0.5 #=> -1

只有括号才能解决问题:

(-1) ** 0.5 #=> 6.123031769111886e-17+1.0i

不如预期1.i有利,但基本上可以接受。在我向Ruby漏洞抱怨之前,我想知道是否有某种原因可以这样做?

2 个答案:

答案 0 :(得分:6)

许多语言通过在数学运算顺序之后建模来定义其运算符优先级表。在数学中,取幂确实具有比乘法更高的优先级,并且一元否定毕竟是乘法。

reply中的matz到“对数字的符号在省略时省略”:

  

具有数学背景的人要求优先于**   高于一元减去。这就是原因。

答案 1 :(得分:4)

是的,**在Ruby中有higher precedence

与某些语言不同,- lex'作为数字文字的一部分,因此只是(并且普遍)是一元-(又名{{1} }})。也就是说,-@-x都将一元-1解析为应用于表达式结果的运算符。