मान लीजिए कि मेरे पास Option[A => Boolean]
है, List[A]
, और संचालन के कुछ सेट मैं उस सूची के उप-समूह पर प्रदर्शन करना चाहता हूं। यदि विकल्प सेट किया गया है, तो मैं पहले सूची को फ़िल्टर करना चाहता हूं और फिर अपने परिचालनों को लागू करना चाहता हूं। यदि नहीं, तो मैं इसे पूरी सूची में लागू करना चाहता हूं। एक उदाहरण:सशर्त रूप से एक अनुक्रम फ़िल्टर करें
val a : Option[Int => Boolean] = Option((a : Int) => a % 2 == 0)
val b = 1 to 100
मैं आसानी से निम्न कर सकते हैं:
val c = if (a.isDefined) b.filter(a.get) else b
हालांकि, इस a.get
बुला शामिल है; बहुत कंडीशनिंग मुझे ऐसा करने में असमर्थ छोड़ देता है! मैं वैकल्पिक रूप से कर सकता है:
val c = b.filter(a.getOrElse(_ => true))
यह बेहतर महसूस करता है, लेकिन अब मैं एक दूसरे (तुच्छ यद्यपि) आपरेशन मेरी अनुक्रम के प्रत्येक तत्व के लिए किया जा रहा के साथ फंस कर रहा हूँ। मैं उम्मीद कर सकता हूं कि इसे अनुकूलित किया जाएगा, लेकिन यह अभी भी अपूर्ण महसूस करता है।
मुझे क्या चाहिए कुछ दोष की कमी है। ऐसा लगता है कि ऐसा करने का एक अच्छा तरीका होना चाहिए - कोई विचार?
हां; किसी कारण से मैं स्थिति को फिसलने के विचार को देखने में असफल रहा। यह बहुत साफ है। – Submonoid
फिर भी एक और कारण है कि पैटर्न "option.map()। GetOrElse()" को मानक लाइब्रेरी में जोड़ा जाना चाहिए। यह हमेशा पहली चीजों में से एक है जिसमें मैं चिल्लाता हूं। –
@ डेवग्रिफिथ - दरअसल। मेरे पास सिंटैक्स 'ओ.मैप (एफ) .getOrElse (बी)' ओ 'फोल्ड (बी) (एफ) 'के साथ' फोल्ड '(स्कालाज़ की तरह) कहा जाता है। –