मैं एक सापेक्ष स्कैला शुरुआती हूं और एक कार्यान्वयन पर आगे बढ़ने के बारे में कुछ सलाह चाहूंगा जो ऐसा लगता है कि इसे फ़ंक्शन रिटर्निंग विकल्प या पार्टियल फ़ंक्शन के साथ किया जा सकता है। मैंने उन सभी संबंधित पदों को पढ़ा है जिन्हें मैं पा सकता हूं (प्रश्न के नीचे देखें), लेकिन इनमें आंशिक कार्य का उपयोग करने या एक दूसरे को परिवर्तित करने के तकनीकी विवरण शामिल हैं; मैं इस प्रकार के उत्तर की तलाश में हूं "यदि परिस्थितियां एक्स, वाई, जेड हैं, तो ए और बी का उपयोग करें, लेकिन सी पर भी विचार करें"।स्कैला: फ़ंक्शन रिटर्निंग विकल्प का चयन करना आंशिक फ़ंक्शन
मेरा उदाहरण उपयोग केस पथ खोजकों की लाइब्रेरी का उपयोग करके स्थानों के बीच पथ खोज है। मान लें कि स्थान L
प्रकार हैं, एक पथ P
प्रकार था और वांछित पथ खोज परिणाम Iterable[P]
होगा। पैच खोज परिणाम को सभी पथ खोजकर्ताओं (Google मानचित्र जैसे कुछ में साइकिल, कार, वॉक, सबवे इत्यादि) में उनके पथ सुझावों के लिए इकट्ठा किया जाना चाहिए, जो कि किसी विशेष प्रारंभ के लिए परिभाषित किया जा सकता है या नहीं/अंत स्थान जोड़ी।
(क) f: (L,L) => Option[P]
के रूप में एक पथ खोजक को परिभाषित करने और उसके बाद finders.map(_.apply(l1,l2)).filter(_.isDefined).map(_.get)
की तरह कुछ के माध्यम से परिणाम प्राप्त
(ख) एक पथ खोजक f: PartialFunction[(L,L),P] and then get the result via something like
के रूप में परिभाषित करते हैं:
इस बारे में जाने के लिए दो तरीके होने लगते हैं finders.filter (_.isDefined ((l1, l2))) .map (_.apply ((l1, l2))) `
ऐसा लगता है कि Option[P]
लौटने वाले फ़ंक्शन का उपयोग करने से ऐसा लगता है कि परिणाम के दोहरे मूल्यांकन से बचें, इसलिए एक महंगी गणना के लिए यह तब तक बेहतर हो सकता है जब तक कि कोई नतीजे न पहुंचे। ऐसा लगता है कि Option
का उपयोग करने के लिए एक मनमाने ढंग से इनपुट हस्ताक्षर हो सकता है, जबकि PartialFunction
एक तर्क की अपेक्षा करता है। लेकिन मुझे स्कैला लाइब्रेरी के साथ बातचीत जैसे कम तत्काल, अधिक "बड़ी तस्वीर" विचारों के बारे में व्यावहारिक अनुभव वाले किसी व्यक्ति से सुनने में विशेष रूप से रूचि है। PartialFunction
का उपयोग करना संग्रह एपीआई के कुछ तरीकों को उपलब्ध कराने में महत्वपूर्ण लाभ है जो अन्य तरीकों से भुगतान कर सकते हैं? क्या ऐसा कोड आम तौर पर अधिक संक्षिप्त होगा?
संबंधित लेकिन अलग अलग सवाल:
- Inverse of PartialFunction's lift method
- Is the PartialFunction design inefficient?
- How to convert X => Option[R] to PartialFunction[X,R]
- Is there a nicer way of lifting a PartialFunction in Scala?
- costly computation occuring in both isDefined and Apply of a PartialFunction