स्काला के @ ऑपरेटर क्या करते हैं?
उदाहरण के लिए, स्कैला, भाग 2 में औपचारिक रूप से ब्लॉग पोस्ट में कुछ इस तरह से है
case x @ Some(Nil) => x
स्काला के @ ऑपरेटर क्या करते हैं?
उदाहरण के लिए, स्कैला, भाग 2 में औपचारिक रूप से ब्लॉग पोस्ट में कुछ इस तरह से है
case x @ Some(Nil) => x
जवाबों:
यह एक मिलान पैटर्न को एक चर से बांधने में सक्षम बनाता है। उदाहरण के लिए, निम्नलिखित पर विचार करें:
val o: Option[Int] = Some(2)
आप आसानी से सामग्री निकाल सकते हैं:
o match {
case Some(x) => println(x)
case None =>
}
लेकिन क्या होगा अगर तुम नहीं चाहते थे सामग्री की Some
, लेकिन विकल्प ही? इस के साथ पूरा किया जाएगा:
o match {
case x @ Some(_) => println(x)
case None =>
}
ध्यान दें कि किसी भी स्तर @
पर उपयोग किया जा सकता है, न कि केवल मिलान के शीर्ष स्तर पर।
_*
) की बात करते हैं । लेकिन शायद यह कल्पना के एक नए संस्करण पर स्पष्ट किया गया है।
@
साथ उपयोग नहीं करेंगे Some(_)
, बल्कि यदि आप सामग्री पर मिलान करना चाहते हैं Some
, लेकिन फिर भी कुछ को संदर्भित करते हैं, जैसे case x @ Some(7) => println(x)
। जैसा कि मैं व्याख्या करता हूं कि यह case x @ Some(_)
सिर्फ एक अधिक वर्बोज़ संस्करण है case x: Some
।
case x: Some
यह अपने आप काम नहीं करता है। आपको उपयोग करना है case x: Some[_]
, जो कि कोई कम
@
एक सफलतापूर्वक मिलान किए गए पैटर्न या उपपट्ट पर एक नाम बांधने के लिए इस्तेमाल किया जा सकता है। पैटर्न का उपयोग पैटर्न मिलान, <-
समझ के लिए बाएं हाथ की ओर और विनाशकारी वर्गीकरण में किया जा सकता है।
scala> val d@(c@Some(a), Some(b)) = (Some(1), Some(2))
d: (Some[Int], Some[Int]) = (Some(1),Some(2))
c: Some[Int] = Some(1)
a: Int = 1
b: Int = 2
scala> (Some(1), Some(2)) match { case d@(c@Some(a), Some(b)) => println(a, b, c, d) }
(1,2,Some(1),(Some(1),Some(2)))
scala> for (x@Some(y) <- Seq(None, Some(1))) println(x, y)
(Some(1),1)
scala> val List(x, xs @ _*) = List(1, 2, 3)
x: Int = 1
xs: Seq[Int] = List(2, 3)
आपको किसी पैटर्न के शीर्ष-स्तर से मेल खाने देता है। उदाहरण:
case x @ "three" => assert(x.equals("three"))
case x @ Some("three") => assert(x.get.equals("three")))
case x @ List("one", "two", "three") => for (element <- x) { println(element) }
यह x
उस पैटर्न के मूल्य को निर्धारित करता है जो मेल खाता है। आपके उदाहरण में, x
ऐसा होगा Some(Nil)
(जैसा कि आप कॉल से प्रिंटलाइन पर निर्धारित कर सकते हैं )