Scala 类型系统深度解析
1. 理解类型
在 Scala 中,某个事物的类型是编译器所掌握的关于该事物信息的总和。通常情况下,我们讨论的是变量的类型,编译器所掌握的信息包括该变量可用的方法以及变量所继承的类。Scala 一个非常便利的特性是,它会尽可能使用类型推断,从而让开发者无需显式定义类型。
2. 创建类型的方式
在 Scala 中,有四种定义类型的方式:
- 使用字面量定义单例类型
- 使用 type
关键字为抽象或具体类型定义别名
- 定义类、对象或特质来创建具体类型
- 定义方法来创建方法类型
下面是在 Scala REPL 中定义和引用具体类型的示例:
scala> class SomeClass
defined class SomeClass
scala> object SomeObject
defined object SomeObject
scala> :type SomeObject
SomeObject.type
scala> :type new SomeClass
SomeClass
scala> trait SomeTrait {
| def usage(a: SomeClass, b: SomeObject.type): SomeTrait
| }
defined trait SomeTrait
从这个示例可以看出,类型在完全定义之前就可以被引用。