Scala编程(第5版)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

5.11 结语

本章想告诉你的主要是Scala的操作符其实是方法调用,以及Scala的基础类型可以被隐式转换成富包装类,从而拥有更多实用的方法。下一章将向你展示什么叫作用函数式的编程风格设计对象,并相应地给出本章你看到的某些操作符的全新实现。

[1]包(package)这个概念在第2章的第1步简单介绍过,并且会在第12章中详细介绍。

[2]译者注:自Scala 2.13起,Scala编译器允许整数字面量以0开头,但不会将它们当作八进制处理,只是简单地忽略这些前置的0,实际效果为十进制。

[3]译者注:原作者在这里特意用了一个双关语,英文中“字面量”(literal)和“字面上”“确实地”“跟真的一样”(literally)是由同一个词派生的。

[4]重载的方法名称相同但参数类型不同。方法重载在6.11节会有更详细的介绍。

[5]在未来版本的Scala中,对于以非符号命名的方法(译者注:即常规命名的方法),只有在声明时使用了infix修饰符的情况下才允许被当作操作符。

[6]译者注:自Scala 2.13起,使用后缀表示法需要引入scala.language.postfixOps。

[7]不过这并不是“世界末日”,还存在一个非常小的概率,即你的*p会被当作C++那样正常编译。

[8]按位异或方法对其操作元执行按位异或操作,对相同的位交出0,对不同的位交出1。因此0011^0101会交出0110。

[9]整数类型最左边的位是符号位。如果最左边的一位是1,这个数就是负数;如果是0,这个数就是正数。

[10]自动检查并不会关心右边是否为null,不过任何讲道理的equals方法都应该对入参为null的情况返回false。

[11]至此你应该知道,Scala编译器会把这段代码翻译成(bills.!*&^%~(code)).!()。(译者注:在英文语境下,这种表示法常用于替代脏话。)