2013-06-18 4 views
9

मेरे स्कैला कार्यक्रम में, मुझे कुछ JSON प्राप्त हो रहा है।विकल्प का इलाज करने का बेवकूफ तरीका [बूलियन]

फ़ील्ड में से एक वैकल्पिक बूलियन है। यदि फ़ील्ड गुम है, या यदि इसका मान गलत है, तो मैं None वापस करना चाहता हूं। यदि इसका मान सही है, तो मैं Some(true) वापस करना चाहता हूं।

के बाद से इस None में Some(false) परिवर्तित करने के बराबर है, मैं निम्नलिखित समारोह को परिभाषित किया है:

def boolmap(ob: Option[Boolean]) = if(ob == Some(false)) None else ob

यह काम करता है, लेकिन यह बहुत मुहावरेदार होने के लिए प्रतीत नहीं होता। क्या कुछ और सुरुचिपूर्ण है?

+6

चूंकि आप एक दोहरी स्थिति में एक त्रिज्या की स्थिति को कम कर रहे हैं, आईएमओ मुहावरे एक सादे बूलियन ('getOrElse (झूठी)') का उत्पादन करना होगा और 'विकल्प' –

+0

@ 0__ ड्रॉप करना होगा कुछ चीज के लिए विकल्प कुछ आसान है। बाद में करना है। – Eduardo

+0

अंतर्निहित बूलियन मान प्राप्त करने के लिए आप 'ob.isDefined' का उपयोग नहीं कर सकते? –

उत्तर

19

यह ob.filter(identity) है। मुझे यकीन नहीं है कि यह स्पष्ट है, लेकिन यह छोटा है।

+1

धन्यवाद! मुझे 'x <- ob अगर x) उपज x' – Eduardo

+0

@Eduardo - वास्तव में मिला है। 'Ob.filterNot (! _)', 'Ob.find (पहचान) ',' ob.collect {case true => true}', और कई अन्य भी हैं। आप 'पहचान' के स्थान पर 'x => x' भी लिख सकते हैं। –

6

मैं दूसरों है कि आप के रूप में अच्छी बस वापस कर सकती है true या false जब से तुम के बीच विशेषता, सब पर वहाँ जा रहा है null जा रहा है या false नहीं किया जा रहा फर्क नहीं कर रहे हैं के साथ सहमत हैं।

तुम सिर्फ Boolean लौटे, तो आप इसे इस तरह से कर सकता है:

scala> Some(true) exists { _ == true } 
res0: true 

scala> Some(false) exists { _ == true } 
res1: Boolean = false 

scala> None exists { _ == true } 
res2: Boolean = false 

आप Option[Boolean] लौटने पर जोर देते हैं, तो एक पैटर्न मैच अधिक मुहावरेदार होगा:

ob match { 
    case Some(true) => Some(true) 
    case _   => None 
} 

तुम भी collect इस्तेमाल कर सकते हैं लेकिन इस मामले में यह आईएमओ अजीब लगेगा:

obj collect { case true => true } 
+2

'मौजूद {_ == true} 'के बजाय' मौजूद (पहचान)' या '(सत्य)' लिखना अधिक समझदार है। बूल की तुलना में सच्चाई की तुलना कई प्रोग्रामर द्वारा की जाती है [क्या यह स्पष्ट रूप से बूलियन स्थिरांक के खिलाफ तुलना करना बुरा है। यदि जावा में (बी == झूठा)] (http://stackoverflow.com/questions/2661110/is-it-bad-to-explicitly-compare-against-boolean-constants-eg-if-b-false-i)। – Suma

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

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