क्या नक्शा कुंजी के खिलाफ पैटर्न मिलान को सक्षम करने के लिए कोई स्कैला चाल है? दूसरे शब्दों में, मैं एक एक्स्ट्रेक्टर चाहता हूं कि मैप इंस्टेंस के बगल में भी एक महत्वपूर्ण मान स्वीकार किया जाए जिसका अर्थ यह होगा कि मैं यह पैटर्न केवल तभी मिलान करना चाहता हूं जब मिलान योग्य मान मानचित्र का एक उदाहरण है और दी गई कुंजी के साथ एक प्रविष्टि है इसमें और इस प्रविष्टि के लिए मूल्य रिकर्सिव पैटर्न मिलान के अधीन हो सकता है।स्कैला मानचित्र प्रविष्टियों के खिलाफ पैटर्न मिलान
कुछ इस तरह:
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")
}
इसी प्रकार के प्रश्न: Can extractors be customized with parameters in the body of a case statement (or anywhere else that an extractor would be used)?
फ़ीचर अनुरोध: SI-5435
क्या आप वाकई भी मैच के लिए है कि क्या 'myMap' है चाहते हैं एक नक्शा? यह और क्या हो सकता है? – ziggystar
आपके दूसरे मामले के खिलाफ मैच की उम्मीद क्या है? मेरा मैप कैसा दिखता है जैसे यह मेल खाता है? – Shadowlands
यह एक सरलीकृत उदाहरण है। असल में, मैं NSObject से प्राप्त ऐप्पल कोको प्रकारों पर संचालन के लिए एक स्कैला लाइब्रेरी विकसित कर रहा हूं। विशेष रूप से, कार्य आईओएस प्लिस्ट फ़ाइल को पार्स करना है जो एक ही चीज़ का वर्णन करने के कई वैकल्पिक तरीकों से बहुत परिष्कृत है। –