groovy - Groovy 幂运算符 (**) 的结合性是否被破坏?

标签 groovy exponentiation

在 Groovy 3.0 中(Groovy 版本:3.0.0-rc-1 JVM:11.0.2)

println 3**3**3
println 3.0**3.0**3.0

给出

19683
19683

在终端的 Python (Python 3.5.2) 中,我得到

>>> 3**3**3
7625597484987
>>> (3**3)**3
19683

official site没有给出任何指示。

目前 Groovy 中的 ** 是否已损坏?


编辑

答案 stackoverflow , math.stackexchange明确数学约定是求幂是右结合的。

缺陷是defined作为软件产品中不满足软件需求(如需求规范中所述)或最终用户期望(可能未指定但合理)的条件。

由于这种合理的期望以未记录的方式被违反,这难道不被视为一个错误吗?

最佳答案

不,它没有坏

与所有其他运算符一样,它仅具有从左到右的关联性

在 python 中 ** 具有从右到左的关联性,因此也不会被破坏

他们只是有不同的规则

关于groovy - Groovy 幂运算符 (**) 的结合性是否被破坏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59499134/

相关文章:

Groovy 交换变量,如 ruby

php - OrientDB PHP/Gremlin 桥

functional-programming - 模式匹配中的变量如何允许参数省略?

algorithm - 值以 2 的幂递增的循环的时间复杂度

c++ - 计算a ^ b ^ c mod 10 ^ 9 + 7

grails - 如何向 Grails 3 application.yml 添加全局 Gorm 约束?

java - println 不使用 Groovy 中覆盖的 toString 方法

grails - Grails-通过父集合中子obj的存在来查找所有对象

python - 使用求幂 **0.5 比 math.sqrt 效率低?

prolog - Power with successor arithmetic - 如何防止无限循环? [序言]