Определение ChainedMap в Scala - PullRequest
       2

Определение ChainedMap в Scala

0 голосов
/ 06 января 2011

Я пытаюсь определить «сцепленную карту» после http://steve -yegge.blogspot.com / 2008/10 / universal-design-pattern.html Я столкнулся с проблемой определения метода объекта-компаньона apply. Вот что я придумала:

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)

1 Ответ

4 голосов
/ 06 января 2011

Что ж, расширить коллекции Scala сложно.Есть эта ссылка , а также некоторые блоги и вопросы переполнения стека.Однако вам не нужно это делать, потому что это уже поддерживается.

scala> val parentMap = Map("x" -> 1, "y" -> 2)             
parentMap: scala.collection.immutable.Map[java.lang.String,Int] = Map((x,1), (y,2))

scala> val childMap = Map("a" -> 42) withDefault parentMap
childMap: scala.collection.immutable.Map[java.lang.String,Int] = Map((a,42))

scala> childMap("x")
res5: Int = 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...