我对 Scala 很陌生。我浏览了这本书,在代码中偶然发现了这两个运算符。他们在做什么 ?
最佳答案
语法糖
在 Scala 中使用运算符时,有一些语法糖适用。
考虑一个运算符 *
.当编译器遇到 a *= b
, 它将检查方法 *=
是否在 a
上定义,并调用 a.*=(b)
如果可能的话。否则表达式将扩展为 a = a.*(b)
.
但是,任何以 :
结尾的运算符转换为方法调用时将交换左右参数。所以a :: b
变成 b.::(a)
.另一方面a ::= b
变成 a = a.::(b)
由于缺少订单反转,这可能与直觉相反。
由于特殊含义,无法定义操作符:
.所以:
与其他符号结合使用,例如 :=
.
运算符的含义
Scala 中的运算符由库作者定义,因此它们可以表示不同的含义。::
运算符通常用于列表连接,a ::= b
意味着 take a, prepend b to it, and assign the result to a
.a := b
通常意味着 set the value of a to the value of b
,而不是 a = b
这将导致 the reference a to point to object b
.
关于Scala: ":="和 "::="运算符做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7294217/