我敢打赌,有一些时髦的方法可以通过新的反射库和/或 repl 电源模式在 repl 中显示线性化。这些是什么?
在我的特殊情况下,我试图了解 ArrayBuffer 实例的线性化。
(我正在尝试创建一个类似的类,即 Buffer 和 IndexedSeqOptimized,并且我发现编译器抱怨重写方法 seq 具有不兼容的类型)
scala 类的线性化规则在scala 规范第 5.1.2 节中描述。据我了解,方法覆盖以线性化顺序进行,而初始化以反向线性化顺序进行。
我敢打赌,有一些时髦的方法可以通过新的反射库和/或 repl 电源模式在 repl 中显示线性化。这些是什么?
在我的特殊情况下,我试图了解 ArrayBuffer 实例的线性化。
(我正在尝试创建一个类似的类,即 Buffer 和 IndexedSeqOptimized,并且我发现编译器抱怨重写方法 seq 具有不兼容的类型)
scala 类的线性化规则在scala 规范第 5.1.2 节中描述。据我了解,方法覆盖以线性化顺序进行,而初始化以反向线性化顺序进行。
baseClasses
Scala 反射 API上有一个方法Type
,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