マップキーとのパターンマッチングを有効にするScalaのトリックはありますか?言い換えれば、私はMapインスタンスの横に抽出可能なキー値を受け入れることを希望します。これは、一致可能な値がMapのインスタンスであり、指定されたキーを持つエントリがある場合にのみ、このエントリの値は再帰的パターンマッチングの対象となります。スカラマップエントリとのパターンマッチング
このような何か:
myMap match {
case MyMap("a")(a) => // do smth with value a
case MyMap("b")(MyMap("c")(c)) => // do smth with value c
}
更新:
私は目標に近いアプローチするいくつかの方法を見つけたが、それは、合成キーと値の定義を意味しますので、それはまだ完璧ではありません-holders:
case class MapKey[K](key: K) {
def unapply(o: Any) = o match {
case m: Map[K, _] ⇒ m.get(key)
case _ ⇒ None
}
}
val m1 = Map("a" → "aa", "b" → Map("c" → "cc"))
val m2 = Map("a" → "aa", "d" → "dd")
val b = MapKey("b")
val c = MapKey("c")
val d = MapKey("d")
for (m ← List(m1, m2)) m match {
case b(c(x)) ⇒ println(s"b > c: $x")
case d(x) ⇒ println(s"d: $x")
}
機能リクエスト:SI-5435
あなたは必ずもmyMap'は 'かどうかを一致させたいです:あなたは、キーと値のペアを一致させたい場合は、PFを使用することができます地図?それ以外に何ができますか? – ziggystar
あなたの2番目の場合は、一致すると思われますか?一致した場合、myMapはどのように見えますか? – Shadowlands
これは簡単な例です。実際には、私はNSObjectから派生したApple Cocoa型の操作のためにScalaライブラリを開発しています。特に、iOS Plistファイルを解析することは非常に洗練されており、同じことを説明する複数の代替方法があります。 –