コレクション API における Scala のさまざまな "Like" 特性を理解するのを手伝ってくれませんか。私は何度も読んで、運が悪いのでそれぞれを比較しようとしました。たとえば、Map は MapLike を拡張し、2 つの具象メソッドを追加していることがわかると思います。しかし、これは、なぜこれを行うのかという疑問を投げかけます。Map と MapLike の代わりに、コレクション API に 1 つの Map 特性を持たないのはなぜですか?
ありがとうございました!
コレクション API における Scala のさまざまな "Like" 特性を理解するのを手伝ってくれませんか。私は何度も読んで、運が悪いのでそれぞれを比較しようとしました。たとえば、Map は MapLike を拡張し、2 つの具象メソッドを追加していることがわかると思います。しかし、これは、なぜこれを行うのかという疑問を投げかけます。Map と MapLike の代わりに、コレクション API に 1 つの Map 特性を持たないのはなぜですか?
ありがとうございました!
これらの詳細の最良の情報源は、Martin Odersky と Lex Spoon の「What's New in Scala 2.8: The Architecture of Scala Collections」です。
Scala コレクション ライブラリは、コードの重複を回避し、一般的なビルダーと、いわゆる実装特性のコレクションに対するトラバーサルを使用することで、「同じ結果型」の原則を実現します。これらの特性には
Like
接尾辞が付いています。たとえば、IndexedSeqLike
は の実装特性でIndexedSeq
あり、同様にTraversableLike
は の実装特性ですTraversable
。Traversable
またはなどのコレクション クラスIndexedSeq
は、これらのトレイトから具象メソッドの実装をすべて継承します。実装の特性には、通常のコレクションの 1 つではなく、2 つの型パラメーターがあります。コレクションの要素型だけでなく、コレクションの表現型もパラメータ化し ます。Seq[I]
、またはList[T]
...などの基になるコレクションの型
独自のコレクション クラスを Collections API と統合する場合、またはライブラリのしくみをより深く理解したい場合は、この記事全体が非常に役立ちます。