मुझे अक्सर एक पैटर्न का सामना करना पड़ता है, इसलिए मैं सोच रहा था कि इसके लिए स्कैला लाइब्रेरी में कोई सुविधाजनक तरीका है या नहीं।जब तक यह लौटा नहीं जाता है तब तक फ़ंक्शन को आवर्ती कॉल करें
इसे f: A => Option[B]
फ़ंक्शन दें। मैं f
से , f(f(f(x).get).get...)
से शुरू होने के साथ एक पुनरावर्ती कॉल करना चाहता हूं, f
None
लौटाता है और अंतिम गैर-None
मान देता है।
@tailrec
def recurrentCallUntilNone[B](f: B => Option[B], x: B): B = f(x) match {
case Some(y) => recurrentCallUntilNone(f, y)
case None => x
}
यह पहले से ही मानक पुस्तकालय में लागू किया गया है:
मैं इस के लिए एक कार्यान्वयन लिखा था?
इसके लिए एक उपयोग उदाहरण एक सूची (जिपर) के लिए हो सकता है जो वर्तमान स्थिति को बनाए रखता है। next
पर कॉल करके, None
वापस लौटाया जाता है यदि वर्तमान स्थिति के बाद कोई तत्व नहीं है या उसी सूची के लिए Option
है, लेकिन वर्तमान स्थिति में वृद्धि हुई है। उपर्युक्त विधि का उपयोग करके, end
विधि का निर्माण किया जा सकता है जो सूची को अंत तक खोजता है।
यह पुस्तकालय में नहीं है, और आप इसे सही तरीके से कर रहे हैं। –
'@ tailrec' जोड़ें! –
यह लगभग एक ''खुला'] है (http://daily-scala.blogspot.co.at/2009/09/unfoldleft-and-right.html)।लेकिन यह किसी भी libs में प्रतीत नहीं होता है। – phg