6

新しいリフレクションライブラリやreplパワーモードを介して、replで線形化を示すための巧妙な方法があるに違いありません。彼らは何ですか?

私の特定のケースでは、ArrayBufferインスタンスの線形化を理解しようとしています。
(私はBufferとIndexedSeqOptimizedである同様のクラスを作成しようとしていますが、オーバーライドするメソッドseqの型に互換性がないというコンパイラからの苦情を見つけています)

Scalaクラスの線形化のルールは、scala仕様のセクション5.1.2で説明されています。私が理解しているように、メソッドのオーバーライドは線形化の順序で行われ、初期化は逆の線形化の順序で行われます。

4

1 に答える 1

7

ScalaリフレクションAPIには、そのscaladocによると、以下を返すメソッドがありますbaseClassesTypeClassSymbol

このタイプのすべての基本クラス(独自の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
于 2013-03-25T20:54:39.930 に答える