什么是幽灵类型?
一个幽灵类型是在运行时表现为没有副作用的抽象类型。 因为他们在运行时没有副作用,所以一旦它显示明确类型之后,会被编译器从结果集中擦除。
如果一个函数接受一个幽灵类型,那么他的返回值将不会受他的参数影响。
定义一个幽灵类型
幽灵类型是通过一个object
继承 scala.Phantom
来定义的,这个对象表示幽灵类型的一个领域,是完全区别开scala.Any
或者其他的幽灵类型的领域。
package scala
trait Phantom { // only an `object` can extend this trait
protected final type Any // not a subtype of scala.Any
protected final type Nothing // subtype of every subtype of this.Any
protected final def assume: this.Nothig
}
object MyPhantoms extends Phantom