2013-04-26 3 views
48

क्या कोई तरीका है, केवल स्केल संग्रह API का उपयोग करके, सूची में एक विकल्प प्राप्त करने के लिए जब इसकी अनुक्रमणिका द्वारा तत्व प्राप्त करने का प्रयास किया जा सकता है?स्कैला में संग्रह में इंडेक्स से एक विकल्प कैसे प्राप्त करें?

मैं इस फ़ंक्शन के समतुल्य की तलाश में हूं, क्या यह अस्तित्व में है?

def optionalValue[T](l: List[T], index: Int) = { 
    if (l.size < (index+1)) None 
    else Some(l(index)) 
} 

धन्यवाद

उत्तर

104

हाँ, आप एक समारोह Int => Option[A] करने के लिए अपने संग्रह उठा सकते हैं:

scala> List(1,2,3).lift 
res0: Int => Option[Int] = <function1> 

scala> List(1,2,3).lift(9) 
res1: Option[Int] = None 
+0

अच्छा! धन्यवाद! – Loic

+10

मैंने स्कैला में बहुत से डेटा-स्ट्रक्चर के लिए पहले से ही 'लिफ्ट' देखा है, नामकरण (और अमूर्तता) के पीछे तर्क क्या है? – kosii

+2

@kosii शायद उत्तर के साथ थोड़ा देर हो चुकी है, लेकिन इस मामले में "लिफ्ट" प्रकार 'Int => T' के आंशिक कार्य से' int => विकल्प [टी] 'के कुल कार्य में परिवर्तन को संदर्भित करता है। यह कुछ सामान्य सामान्य से कुछ सामान्य सामान्य रूप से बदलने के लिए काफी आम बात है, या दूसरे शब्दों में, "नई संरचना" जोड़ना, उदाहरण के लिए एक मोनड को एक मोनड ट्रांसफॉर्मर में बदलना, या एक मजेदार को एक मोनोड में बदलना। मुझे लगता है कि यह शब्द श्रेणी सिद्धांत से आया है, लेकिन मुझे कोई निश्चित संदर्भ नहीं मिला। –

संबंधित मुद्दे