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

标签 scala operator-keyword

我对 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/

相关文章:

c# - 在 C# 中定义 F# '**' 运算符

scala - 如何在编译时使用scala验证字符串格式

java - 如何使用 Java 使用 scala.collection.immutable.Stream 类

php - 斯卡拉项目 + PHP

c++ - 赋值运算符不起作用

c++ - 当我用 case 语句调用自定义对象时,为什么不显示它?

scala - 使用 map 来突变可变集合?

scala - sbt 组件,包括我的 jar

operator-keyword - C# 自定义迭代器实现

c++ - 在 C++ 中向多态树添加功能