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

这导致了如下情况:

-1 ** 0.5 #=> -1 

只有括号补救它:

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

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

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

从matz 回复 “在对其进行平方时省略了数字的符号”:

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

是的, **在Ruby中具有更高的优先级 。

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