【问题标题】:The place of Scala singletons in the type hierarchyScala 单例在类型层次结构中的位置
【发布时间】: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


    【解决方案1】:

    单例之间没有共同特征,但它们不一定是AnyRef 的直接后代,因为object 可以扩展classtrait

    【讨论】:

      猜你喜欢
      • 2011-05-06
      • 2017-01-24
      • 1970-01-01
      • 2013-11-28
      • 2017-04-18
      • 1970-01-01
      • 1970-01-01
      • 2019-07-05
      • 1970-01-01
      相关资源
      最近更新 更多