डीईएफ़ विधि और वैल समारोह के साथ बनाम flatMap समतल:डीईएफ़ विधि और वैल समारोह के साथ बनाम flatMap समतल
मैं परिभाषित toInt नामक एक डीईएफ़ विधि:
def toInt(s: String): Option[Int] = {
try {
Some(Integer.parseInt(s.trim))
} catch {
case e: Exception => None
}
}
और इस विधि ठीक काम करता है निम्नानुसार flatten और flatMap दोनों के साथ:
//using toInt method
val x = 1.to(5).toList
val y = List("a")
val z = x ++ y
val q = z.map(_.toString)
//using map and flatten
println(q.map(toInt).flatten)
//using flatMap
println(q.flatMap(toInt))
अब मैंने इसे परिभाषित किया है INT (डीईएफ़ विधि के रूप में) कार्यक्षमता एक समारोह "tooInt" में वैल का उपयोग कर:
val tooInt: String => Option[Int] = s => {
try {
Some(Integer.parseInt(s.trim))
} catch {
case c: Exception => None
}
}
इस समतल लेकिन नहीं flatMap साथ साथ ठीक काम करता है जैसा कि नीचे दिखाया:
//using map and flatten
println(q.map(tooInt).flatten)
//using flatMap // this has error
**println(q.flatMap(tooInt))**
आप कृपया मेरी मदद कर सके इसे समझने में?
q.flatMap(s => tooInt(s))
यह सब तथ्य यह है कि हम एक अंतर्निहित option2Iterable
में परिभाषित किया गया है कि करने पर निर्भर करता:
शुभकामनाओं सहित, किरण
भी क्ष। flatMap (भी INT (_)) काम करेगा। मुझे लगता है कि प्रश्न इस बात के बारे में है कि फ्लैटमैप को विधि क्यों पारित किया जा सकता है और फ़ंक्शन अक्षर नहीं हो सकते हैं। – jrook