4

这会导致如下情况:

-1 ** 0.5 #=> -1

只有括号可以解决它:

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

不如预期的好1.i,但基本可以接受。在我去 Ruby bug 抱怨之前,我想知道这是否有某种原因?

4

2 回答 2

6

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

来自 matz 在对“平方时省略数字的符号”的回复:

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

于 2012-11-11T06:32:05.077 回答
4

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

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

于 2012-11-11T06:33:25.837 回答