http://steve-yegge.blogspot.com/2008/10/universal-design-pattern.htmlの後に "連鎖マップ"を定義しようとしています。コンパニオンオブジェクトapply
メソッドを定義する問題が発生しました。ここで私が出ているものです:ScalaでChainedMapを定義する
import scala.collection.generic.ImmutableMapFactory
import scala.collection.immutable.HashMap
class ChainedMap[A, B](private val superMap: ChainedMap[A, B])
extends HashMap[A, B] {
override def get(key: A): Option[B] = {
if (contains(key)) {
get(key)
} else if (superMap != null) {
superMap.get(key)
} else {
None
}
}
}
object ChainedMap extends ImmutableMapFactory[ChainedMap] {
override def apply[A, B](superMap: ChainedMap[A, B],
elems: (A, B)*): ChainedMap[A, B] = {
// What goes here?
}
}
ここで私はそれを使用する方法である。
val parentMap = ChainedMap(null, "x" -> 1, "y" -> 2)
val childMap = ChainedMap(parentMap, "a" -> 42)
はどのようにあなたが唯一のコンストラクタは、引数として 'ChainedMap'を取り、それは不変の空のハッシュマップのコンストラクタを呼び出す場合、何かが含まれている' ChainedMap'を作成するのですか? –
私は、不変のHashMapsから 'ChainedMap'クラスを作成する際に実際にその点を見ていません。 'val parentMap = Map(" x " - > 1、" y " - > 2)'を作成して、すでに組み込まれているサポートを使って 'val childMap = parentMap ++(" a " - > 42) Scalaコレクションライブラリ –
@Ken Bloom:Duh!私はそれを考えなかった。同じ鍵が子供と親の両方に現れたら、子供が最初に見つかるでしょう。私はおそらく質問を削除し、自分自身の恥ずかしさを保存する必要があります。 – Ralph