1

type のアイテムの出現回数を単純に保持する拡張データ構造 (Python のCounterCounter[A]に触発された)を作成したいと考えています。私はそれに2つの追加のメソッドを持たせたいと思っています. しかし、他のScalaコレクションメソッドが単純に機能するためにオーバーライド/実装する必要があるメソッドの最小セットは何かについて混乱しています。Map[A, Int]Aadd(item: A)remove(item: A)itemmapfilterMap[A, Int]Map

4

2 に答える 2

4

継承を委任に置き換えることを検討してください。つまり、クラスは拡張できますが、プライベートメンバーMap[A, Int]を含める必要があります。Map[A, Int]クラスへのすべての呼び出しは、同じ呼び出しをメンバーに委任するだけです。

これが私の提案の部分的な実装です。

class MyClass[A, Int] extends collection.immutable.Map[A, Int] {
  private val map = collection.immutable.Map.empty[A, Int]

  def get(key: A): Option[Int] = {
    map.get(key)
  }

  def iterator: Iterator[(A, Int)] = {
    map.iterator
  }

  def -(key: A): Map[A, Int] = {
    map - key
  }

  def +[B1 >: Int](kv: (A, B1)): Map[A, B1] = {
    map + kv
  }
}
于 2013-10-26T20:34:31.827 に答える
1

これを見てください: http://docs.scala-lang.org/overviews/core/architecture-of-scala-collections.html scala で新しいコレクションを構築する詳細なプロセスを説明しています。記事全体を読みたくない場合は、セクション「新しいセットとマップの統合」に直接ジャンプできます。このセクションでは、新しい種類のマップを作成する方法を例で示しています。まさにあなたがやりたいことです。

于 2013-10-26T21:00:04.733 に答える