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

Lee*_*oll 6 scala read-eval-print-loop

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

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

scala规范第5.1.2节中描述了scala类的线性化规则.据我了解,方法覆盖按线性化顺序进行,初始化按反向线性化顺序进行.

ghi*_*hik 7

有一种方法baseClassesTypeClassSymbolScala中反射API其中,根据其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) }
Run Code Online (Sandbox Code Playgroud)

输出:

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
Run Code Online (Sandbox Code Playgroud)