Scala:“:=”和“:: =”运算符做什么?

时间:2011-09-03 16:05:38

标签: scala operator-keyword

我对scala很新。我浏览了这本书,并在代码中绊倒了这两个操作符。他们做了什么?

2 个答案:

答案 0 :(得分:14)

Syntactic Sugar

在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

答案 1 :(得分:3)

这将调用左侧对象上的方法:::,右侧的对象作为参数,并将结果分配给左侧的变量

foo ::= bar

相当于

foo = foo.::(bar)

请参阅对象类型的:::方法的文档。

(对于集合,::方法会将一个元素附加到列表的开头。)