Syntax 什么是:=运算符?

Syntax 什么是:=运算符?,syntax,programming-languages,operator-keyword,colon-equals,Syntax,Programming Languages,Operator Keyword,Colon Equals,在某些编程语言中,我看到(例如): 这个操作符通常被称为什么?它做什么?在所有支持操作符的语言中:=它意味着赋值 在支持运算符:=的语言中,=运算符通常表示相等比较 在=表示赋值的语言中,=通常用于相等比较 :=的意思是= 我想不起有哪种语言的:=与=意思相同 在MySQL中,:=和=都用于,但是它们不能互换,选择正确的一个取决于上下文。为了使事情更加混乱,=操作符也用于。将=解释为赋值或比较也取决于上下文。我通常更多地在伪代码中看到它,它意味着赋值。因此,x:=y表示“将x的值设置为y的

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


这个操作符通常被称为什么?它做什么?

在所有支持操作符的语言中
:=
它意味着赋值

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

我想不起有哪种语言的
:=
=
意思相同



在MySQL中,
:=
=
都用于,但是它们不能互换,选择正确的一个取决于上下文。为了使事情更加混乱,
=
操作符也用于。将
=
解释为赋值或比较也取决于上下文。

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

许多语言使用公共运算符。通常,
=
是为变量赋值保留的,如果它是单独的,则不应在数学上下文中查看。虽然PL/I已经(had?)测试了Java和Bash等语言中的平等性,但是
==

PL/I已经(had?)测试了
=
:=
<代码>=用于赋值和比较——编译器试图根据上下文找出您的意思。当/如果它决定在您真正想要分配的地方进行比较,您可以使用
:=
强制分配

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

在PL/I中,它意味着将y与0进行比较,然后将该比较的布尔结果赋给x(即,相当于
x=y==0;
,类似于C)。如果你(头脑清醒,不像PL/I的设计者)打算将0分配给x和y,你会使用
x=y:=0(或
x:=y:=0;
)。

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

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

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

还有其他赋值符号,如
+:=
,发音为加号和变号
x+:=y
将y添加到x的当前值,并将结果存储在x中


(空格没有任何意义,因此可以“插入”标识符,而不必使用下划线)

这是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

Pascal和Modula-2都是由Wirth设计的,使用“:=”作为赋值运算符。Algol使用
:=
进行赋值。在Algol:Pascal、Modula-2等语言的后代中,这种情况往往会继续。GoLang:=允许您为变量赋值,并假设新变量继承赋值所隐含的类型。在R:=中,有时由包中的特定于域的语言使用。例如,在tidyverse和data.table内进行分配(通常在数据帧环境中,以及由于某些原因使用=进行分配不合适的情况下)。链接:和。您遗漏了::=。出现在语言语法中,表示“被定义为等于”。
if env_base := os.environ.get("PYTHONUSERBASE", None):
    return env_base