gpt4 book ai didi

numeric - Squeak Smalltalk,+、-、*、/是否比电源具有更高的优先级?

转载 作者:行者123 更新时间:2023-12-04 22:18:35 28 4
gpt4 key购买 nike

我理解在 Smalltalk 数值计算中,如果没有圆括号,一切都是从左到右计算的。没有什么遵循乘法和除法比加法和减法更优先的规则。

像下面的代码

3 + 3 * 2

打印输出是 12 而在数学中我们得到 9

但是当我开始尝试功率计算时,比如
91 raisedTo: 3 + 1. 

我以为答案应该是 753572

我实际得到的是 68574964

为什么?

是因为 +, -, *, / 比 power 更有优先权吗?

最佳答案

Smalltalk 没有优先级的运算符。相反,存在三种不同类型的消息。每种都有自己的优先级。

他们是:

  • 一元消息 由单个标识符组成,并且在 squaredasString 中没有 3 squaredorder asString 等参数;
  • 二进制消息 具有由 !%&*+,/<=>?@\~- 符号组成的选择器,并且在 +-> 中有一个参数为 3 + 4key -> value
  • 关键字消息 具有一个或多个参数以及每个参数前带有冒号的选择器,如 raisedTo:to:by:do: 中的 4 risedTo: 31 to: 10 by: 3 do: [ … ]

  • 一元消息优先于二进制消息,并且它们都优先于关键字消息。换句话说:
    unary > binary > keyword

    所以例如
    5 raisedTo: 7 - 2 squared = 125

    因为首先计算一元 2 squared 产生 4 ,然后计算二进制 7 - 4 产生 3 ,最后关键字 5 risedTo: 3 计算结果为 125。

    当然,括号的优先级最高。

    为了简化对这个概念的理解,不要考虑数字和数学,所有数字都是对象,所有运算符都是消息。原因是 a + b * c 并不意味着 abc 是数字。它们可以是人类、汽车、在线商店文章。他们可以定义自己的 +* 方法,但这并不意味着 * (这不是“乘法”,它只是一个“星消息”)应该在 + 之前发生。

    关于numeric - Squeak Smalltalk,+、-、*、/是否比电源具有更高的优先级?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47243265/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com