Scala:":="和":: ="运算符做什么?

Tg.*_*Tg. 6 scala operator-keyword

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

Lex*_*Lex 14

句法糖

在Scala中使用运算符时会有一些语法糖.

考虑一个运营商*.当编译器遇到时a *= b,它将检查是否*=定义了方法a,并a.*=(b)在可能的情况下调用.否则表达式将扩展为a = a.*(b).

但是,任何以a结尾的运算符:在转换为方法调用时都会交换左右参数.因此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.