方便的方法来显示一个类的线性化?

时间:2013-03-25 19:51:47

标签: scala read-eval-print-loop

我敢打赌,有一些时髦的方法可以通过新的反射库和/或repl电源模式在repl中显示线性化。这些是什么?

在我的特定情况下,我试图理解ArrayBuffer实例的线性化 (我正在尝试创建一个类似于Buffer和IndexedSeqOptimized的类,我发现编译器抱怨重写方法seq具有不兼容的类型)

scala spec部分5.1.2中描述了scala类的线性化规则。据我了解,方法覆盖按线性化顺序进行,初始化按反向线性化顺序进行。

1 个答案:

答案 0 :(得分:7)

Scala反射API中baseClassesType上的方法ClassSymbol根据其scaladoc返回:

  

此类型的所有基类的列表(包括其自己的typeSymbol)以反向线性化顺序排列,从类本身开始到以类Any结尾。

如何使用这个?这是一个以反向线性化顺序打印scala.collection.immutable.List的所有超类的示例:

import scala.reflect.runtime.universe._
val tpe = typeOf[scala.collection.immutable.List[_]]
tpe.baseClasses foreach { s => println(s.fullName) }

输出:

scala.collection.immutable.List
scala.collection.LinearSeqOptimized
scala.Product
scala.collection.immutable.LinearSeq
scala.collection.LinearSeq
scala.collection.LinearSeqLike
scala.collection.immutable.Seq
scala.collection.immutable.Iterable
scala.collection.immutable.Traversable
scala.Immutable
scala.collection.AbstractSeq
scala.collection.Seq
scala.collection.SeqLike
scala.collection.GenSeq
scala.collection.GenSeqLike
scala.PartialFunction
scala.Function1
scala.collection.AbstractIterable
scala.collection.Iterable
scala.collection.IterableLike
scala.Equals
scala.collection.GenIterable
scala.collection.GenIterableLike
scala.collection.AbstractTraversable
scala.collection.Traversable
scala.collection.GenTraversable
scala.collection.generic.GenericTraversableTemplate
scala.collection.TraversableLike
scala.collection.GenTraversableLike
scala.collection.Parallelizable
scala.collection.TraversableOnce
scala.collection.GenTraversableOnce
scala.collection.generic.FilterMonadic
scala.collection.generic.HasNewBuilder
java.lang.Object
scala.Any