2011-07-02 10 views
20

मान लें मैंस्कैला में कुंजी नहीं मिलने पर कुंजी के साथ मानचित्र के मूल्य तक कैसे पहुंचे?

var mp = Map[String,String]() 

..... 

val n = mp("kk") 

उपरोक्त मामले कुंजी में रनटाइम त्रुटि फेंक होगा "KK" मौजूद नहीं था की है।

मुझे उम्मीद है कि कुंजी मौजूद नहीं होने पर शून्य शून्य होगी। अगर कुंजी मौजूद नहीं है तो मैं एन को शून्य करना चाहता हूं।

एक संक्षिप्त कोड नमूना के साथ स्कैला में इस स्थिति को संभालने का उचित तरीका क्या है?

+7

कभी भी स्केल में 'शून्य' का उपयोग न करें। विकल्पों के द्वारा शून्य मान "प्रतिस्थापित" होते हैं। – paradigmatic

उत्तर

43

सबसे पहले, शायद आप वास्तव में शून्य नहीं चाहते हैं, क्योंकि यह लगभग हमेशा स्कैला में खराब कोडिंग का संकेत है। आप जो चाहते हैं वह एन प्रकार के विकल्प [स्ट्रिंग] के लिए है, जो कहता है कि मान या तो स्ट्रिंग है या गायब है। ऐसा करने के लिए सही तरीके से विधि .Get() के साथ है आप पर नक्शा

val n = mp.get("kk") 

तुम सच में अशक्त की जरूरत है, तो (जावा पुस्तकालयों के साथ इंटरॉप के लिए, उदाहरण के लिए), तो आप उपयोग कर सकते हैं .getOrElse()

val n = mp.getOrElse("kk", null) 
+14

mp.get ("kk")। OrNull :) –

17

इस प्रयास करें:

val valueOpt = mp.get("kk") 

आपका परिणाम प्रकार Option[String] की है और या तो None या Some(actualValue) हो सकता है। आप पता लगाने के लिए पैटर्न मिलान का उपयोग कर सकते हैं:

valueOpt match { 
    case Some(value) => println(value) 
    case None => println("default") 
} 

एक अधिक उपयुक्त जिस तरह से चीजें उस तरह करना है, तथापि, Option पर तरीकों का उपयोग करने के लिए है जैसे: एपीआई के लिए

println(valueOpt.getOrElse("default")) 

देखो Optionthere के लिए दस्तावेज़।

संपादित करें: ध्यान दें कि Map ही सीधे को परिभाषित करता है एक getOrElse विधि, भी, के रूप में डेव के जवाब में दिखाया गया है।

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