【发布时间】:2013-03-10 03:29:38
【问题描述】:
给定一个在 Scala 中定义的单例对象...
object Foo;
有一个类型,Foo.type,它表示该对象唯一符合的类型。酷!
但我对这种类型还有什么了解。任何事物?我可以看出 Foo.type 是 AnyRef 的子类型。酷!
import scala.reflect.runtime.universe.TypeTag
val fooTypeTypeTag = implicitly[TypeTag[Foo.type]]
val anyRefTypeTag = implicitly[TypeTag[AnyRef]]
fooTypeTypeTag.tpe <:< anyRefTypeTag.tpe // true
fooTypeTypeTag.tpe =:= anyRefTypeTag.tpe // false
但是有没有办法知道 Foo.type 是否是 AnyRef 的直接后代?是否存在一些所有单例对象(通过“对象 XXX”定义的事物)都符合的通用类型?它isn't scala.Singleton,但似乎很自然,所有类型 Foo.type、Bar.type 等都应该表达一些共同的特征。有这种事吗?
在找到 Foo.type 的 TypeTag 之后,是否有一些方法可以使用 Scala 反射来探索 Foo.type 的超类型和特征?显然这样的事情不可能详尽无遗,例如潜在的鸭子类型的组合爆炸,但不能通过反射爬上已声明或内置的继承层次结构似乎仍然很奇怪。
谢谢!
【问题讨论】:
标签: scala