这会导致如下情况:
-1 ** 0.5 #=> -1
只有括号才能解决问题:
(-1) ** 0.5 #=> 6.123031769111886e-17+1.0i
不如预期1.i
有利,但基本上可以接受。在我向Ruby漏洞抱怨之前,我想知道是否有某种原因可以这样做?
答案 0 :(得分:6)
许多语言通过在数学运算顺序之后建模来定义其运算符优先级表。在数学中,取幂确实具有比乘法更高的优先级,并且一元否定毕竟是乘法。
从reply中的matz到“对数字的符号在省略时省略”:
具有数学背景的人要求优先于** 高于一元减去。这就是原因。
答案 1 :(得分:4)
是的,**
在Ruby中有higher precedence。
与某些语言不同,-
不 lex'作为数字文字的一部分,因此只是(并且普遍)是一元-
(又名{{1} }})。也就是说,-@
和-x
都将一元-1
解析为应用于表达式结果的运算符。