【问题标题】:What is the := operator?:= 运算符是什么?
【发布时间】:2012-05-11 11:01:30
【问题描述】:

在某些编程语言中,我看到(例如):

x := y

这个:= 操作符通常叫什么,它有什么作用?

【问题讨论】:

  • 您遗漏了 ::=。这出现在语言语法中,表示“被定义为等于”。

标签: syntax programming-languages operator-keyword colon-equals


【解决方案1】:

这是 Python 3.8 中的新运算符,实际上在 BDFL Guido van Rossum 的提前退休中发挥了作用。

正式地,运算符允许所谓的“赋值表达式”。非正式地,算子被称为“海象算子”。

它允许在评估表达式的同时进行赋值。

所以这个:

env_base = os.environ.get("PYTHONUSERBASE", None)
if env_base:
    return env_base

可以简写为:

if env_base := os.environ.get("PYTHONUSERBASE", None):
    return env_base

https://www.python.org/dev/peps/pep-0572/#examples-from-the-python-standard-library

【讨论】:

    【解决方案2】:

    该符号被称为“成为”,由 IAL(后来称为 Algol 58)和 Algol 60 引入。它是为变量赋值的符号。将x := y; 读作“x 变为 y”。

    使用 ":=" 而不是 "=" 进行赋值是数学上的挑剔;对于这样的观点,“x = x + 1”是荒谬的。其他当代语言可能使用左箭头进行赋值,但这在许多字符集中并不常见(作为单个字符)。

    Algol 68 进一步区分识别和赋值; INT the answer = 42; 表示“答案”被声明为等同于 42(即,是一个常数值)。在INT the answer := 42; 中,“答案”被声明为一个变量,最初赋值为 42。

    还有其他分配符号,例如+:=,发音为 plus-and-becomes; x +:= y 将 y 添加到 x 的当前值,并将结果存储在 x 中。

    (空格没有意义,因此可以插入“到”标识符中,而不必与下划线混淆)

    【讨论】:

      【解决方案3】:

      在所有支持运算符:= 的语言中,它表示赋值。

      • 在支持运算符 := 的语言中,= 运算符通常表示相等比较。
      • = 表示赋值的语言中,== 通常用于相等比较。

      := 是指=吗?

      我不记得在任何语言中:== 的含义相同。


      在 MySQL 中,:== 都用于 assignment,但是它们不可互换,选择正确的取决于上下文。为了使事情更加混乱,= 运算符也用于comparison。将= 解释为赋值还是比较也取决于上下文。

      【讨论】:

      • Pascal 和 Modula-2 均由 Wirth 设计,使用 ':=' 作为赋值运算符。
      • Algol 使用:= 进行分配。这往往会在 Algol 的后裔语言中继续存在:Pascal、Modula-2 等。
      • 在 GoLang 中 := 允许您为变量赋值并假设新变量继承了赋值隐含的类型。
      • 在 R 中:= 有时被包中的领域特定语言使用。例如。在 tidyverse 和 data.table 中进行分配(通常在数据框环境中以及由于某种原因不适合使用 = 进行分配的情况下)。链接:stackoverflow.com/questions/32077483/…rdocumentation.org/packages/rlang/versions/0.0.0.9000/topics/…
      【解决方案4】:

      PL/I 拥有(拥有?)=:== 用于赋值和比较——编译器试图根据上下文找出你的意思。当/如果它决定在你真正指派的地方进行比较,你可以使用:= 来强制分配。

      例如,考虑x=y=0; 在 C 中(例如),这意味着“将 0 分配给 y,然后将结果(也是 0)分配给 x。”

      在 PL/I 中,这意味着将 y 与 0 进行比较,然后将该比较的布尔结果分配给 x(即,相当于 C 中的 x = y == 0;)。如果你(理智,不像 PL/I 的设计者)想要表示“将 0 分配给 x 和 y”,你会使用x = y := 0;(或x := y := 0;)。

      【讨论】:

        【解决方案5】:

        许多语言都使用通用运算符。通常,= 保留用于变量赋值,如果单独使用,则不应在数学上下文中查看。通过== 测试某些语言(如 Java 和 Bash)中的平等性

        【讨论】:

          【解决方案6】:

          我通常更多地在伪代码中看到它,这意味着分配。因此 x := y 表示“将 x 的值设置为 y 的值”,而 x = y 表示“x 的值是否等于 y 的值?”

          【讨论】:

            猜你喜欢
            • 2013-07-31
            • 1970-01-01
            • 1970-01-01
            • 2015-05-28
            • 2010-09-21
            • 1970-01-01
            相关资源
            最近更新 更多