我已经看到:=
在几个代码示例中使用过,但从来没有附带解释。在不知道它的正确名称的情况下,完全不可能用谷歌搜索它的使用。
它有什么作用?
http://en.wikipedia.org/wiki/Equals_sign#In_computer_programming
在计算机编程语言中,等号通常表示用于测试值相等性的布尔运算符(例如在 Pascal 或 Eiffel 中),这与符号在数学中的用法一致,或者表示赋值运算符(例如在类 C 语言中) )。做出前一种选择的语言通常使用冒号等号 (:=) 或 ≔ 来表示它们的赋值运算符。做出后一种选择的语言通常使用双等号 (==) 来表示其布尔相等运算符。
注意:我通过搜索找到了这个colon equals operator
在静态类型语言中, Go :=
是一步完成的初始化和赋值。这样做是为了允许在编译语言中创建类似解释的变量。
// Creates and assigns
answer := 42
// Creates and assigns
var answer = 42
来自编程语言世界之外的另一种解释来自Wolfram Mathworld等人:
如果 A 和 B 在定义上相等(即,A 被定义为 B),那么这象征性地写为 A=B,A:=B,或者有时 A≜B。
■ http://mathworld.wolfram.com/Defined.html
■ https://math.stackexchange.com/questions/182101/appropriate-notation-equiv-versus
某些语言:=
用作赋值运算符。
在很多 CS 书籍中,它被用作赋值运算符,以区别于相等运算符=
。但是,在许多高级语言中,赋值是=
,相等是==
。
这是赋值运算符的旧(帕斯卡)语法。它会像这样使用:
a := 45;
它也可能在其他语言中,可能在类似的用途中。
在Python中:
命名表达式( NAME := expr
) 是在 Python 3.8 中引入的。它允许在当前正在评估的表达式中分配变量。冒号等于运算符 :=
有时被称为海象运算符,因为它看起来像一个海象表情符号。
例如:
if any((comment := line).startswith('#') for line in lines):
print(f"First comment: {comment}")
else:
print("There are no comments")
:=
如果您交换了for ,这将是无效的=
。请注意命名表达式周围的附加括号。另一个例子:
# Compute partial sums in a list comprehension
total = 0
values = [1, 2, 3, 4, 5]
partial_sums = [total := total + v for v in values]
# [1, 3, 6, 10, 15]
print(f"Total: {total}") # Total: 15
请注意,该变量total
不是理解的本地comment
变量(第一个示例也是如此)。命名表达式中的NAME
不能是表达式中的局部变量,因此,例如,[i := 0 for i, j in stuff]
它将是无效的,因为i
它是列表推导的局部变量。
我从 PEP 572 文档中举了一些例子——这是一本好书!一旦我的公司从 Python 3.6 升级,我期待使用命名表达式。希望这有帮助!
对于 VB.net,
一个构造函数(对于这种情况,Java 中的 Me = this):
Public ABC(int A, int B, int C){
Me.A = A;
Me.B = B;
Me.C = C;
}
当您创建该对象时:
new ABC(C:=1, A:=2, B:=3)
然后,不管参数的顺序如何,那个 ABC 对象都有 A=2, B=3, C=1
所以,是的,其他人有效阅读您的代码的非常好的做法
这就像一个没有使用小于号 <= 的箭头,所以就像每个人已经说过的“赋值”运算符一样。与等价的逻辑运算符相反,使设置的内容变得清晰。
在数学中,它类似于等于,但 A := B 意味着 A 被定义为 B,三重线等于可以用来表示它在定义上是相似和相等的,但并不总是相同的东西。
无论如何,我指出了那些可能在发明它的人的脑海中的其他参考资料,但实际上只是平面等于而不是等于被采用(或可能很容易与 =< 混淆)并且需要一些新的定义分配的东西,并且这是最有意义的。
历史参考:我第一次看到这个是在 SmallTalk 的原始对象语言中,Apple 的 SJ 只复制了 Windows 部分,微软的 BG 进一步淡化了它们(单线程)。最终,NeXT 中的 SJ 从 Xerox PARC 中吸取了第二个更重要的教训,即成为 Objective C。
无论如何,他们只是从 ALGOL 1958 中采用冒号等于运算符,后来被 Pascal 推广
https://en.wikipedia.org/wiki/PARC_(公司)
https://en.wikipedia.org/wiki/Assignment_(computer_science)
赋值通常允许变量在其生命周期和范围内的不同时间保存不同的值。但是,某些语言(主要是严格的函数式)不允许这种“破坏性”重新分配,因为它可能意味着非本地状态的更改。目的是加强参照透明性,即不依赖于某些变量的状态的函数,但在任何时间点对给定的一组参数输入产生相同的结果。
冒号等于在 Algol 及其后代(如 Pascal 和 Ada)中使用,因为它与 ASCII 与左箭头符号一样接近。
使用等号进行赋值和使用双等号进行比较的奇怪约定是从 C 语言开始的。
在 Prolog 中,赋值和相等测试没有区别。