지도 키에 패턴 일치를 사용하도록 설정하는 스칼라 트릭이 있습니까? 다른 말로하면 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
두 번째로 일치 할 것으로 예상되는 사례는 무엇입니까? 일치하는 경우 myMap은 어떤 모습입니까? – Shadowlands
이것은 단순화 된 예입니다. 실제로 NSObject에서 파생 된 Apple Cocoa 유형에 대한 작업을위한 Scala 라이브러리를 개발 중입니다. 특히, 작업은 동일한 것을 설명하는 여러 대체 방법으로 매우 정교한 iOS Plist 파일을 구문 분석하는 것입니다. –