2009-01-03 16 views
24
Upsert

मैं स्काला में एक नक्शे के साथ काम कर रहा हूँ और हमेशा की तरह "वहाँ एक कुंजी से संबद्ध कोई मूल्य नहीं है, तो, इसे बनाने के मानचित्र में रख और इसे वापस" कर रही:मुहावरेदार स्काला मानचित्र

def alphaMemory(key : AlphaMemoryKey) = { 
    var am = map.getOrElse(key, null) 
    if(am == null) { 
     am = new AlphaMemory(key) 
     map.put(key, am) 
    } 
    am 
} 

मेरे लिए, यह मूर्खतापूर्ण स्कैला कोड की तरह महसूस नहीं करता है। यह जावा की तरह लगता है। क्या यह लिखने का एक और संक्षिप्त तरीका है? ऐसा लगता है कि मैं नया मान डालने और इसे वापस करने के लिए Map.default() को ओवरराइड कर सकता हूं। हालांकि यकीन नहीं है।

धन्यवाद!

उत्तर

31

mutable.Map में getOrElseUpdate है जो आप चाहते हैं कि वास्तव में, कोई मुहावरे आवश्यक नहीं है।

+0

उत्कृष्ट! मुझे एहसास नहीं हुआ कि डिफ़ॉल्ट पैरामीटर "उप-नाम" था इसलिए मैंने स्वयं को आश्वस्त किया था कि इसे हर बार मूल्यांकन किया जाएगा। धन्यवाद! –

+0

मुझे यह देखने में दिलचस्पी होगी कि यह अपरिवर्तनीय मानचित्रों के साथ कैसे किया जाएगा? –

+0

@ मार्कस डाउनिंग 'इस सवाल] पर एक नज़र डालें (http://stackoverflow.com/q/4385976/460387) 'immutable.Map' के समाधान के लिए –