Scala 对操作符没有特殊处理
摘自《Scala 2ed 编程》一书
任何方法都可以是运算符
在 Scala 中,运算符不是特殊的语言语法:任何方法都可以是运算符。使方法成为运算符的原因在于您如何使用它。当你写“s.indexOf('o')”时,indexOf 不是一个操作符。但是当你写“ s indexOf 'o' ”时, indexOf 是一个运算符,因为你是在运算符符号中使用它。
我在您所指的索引中找不到 2 1/2 页。
Scala 运算符始终可用作在某些对象上定义的方法。这也与任何值在 scala 中表示为对象的事实一致,这与 Java 对原始类型的特殊遗留处理不同。
scala 底层实现可以利用原语在字节码级别提高性能,但这对最终用户是透明的。
运营商
所以这里的规则很简单:每个运算符实际上都是在某种类型上定义的方法。运算符中缀符号只是一个可读性问题,例如
val sum = 1 + 2
读起来比
val sum = 1.+(2)
这种符号也是构建具有“自然感觉”的 dsl 的基础。测试库ScalaSpecs清楚地证明了这一点。
特殊的编译器规则
正如您所说,有限数量的“编译器调整”可用于上述目的,以允许更清晰和更易于理解的代码。
可以在此处找到这些“调整”的相关摘要