2009-01-03 102 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 
} 

對我來說,這並不像慣用的Scala代碼。它感覺像Java。有沒有更簡潔的寫作方式?它看起來也許我可以重寫Map.default()插入新值並返回它。但不知道。

謝謝!

回答

31

mutable.MapgetOrElseUpdate這正是你想要的,沒有必要的習語。

+0

非常好!我沒有意識到默認參數是「by-name」,所以我確信自己每次調用它都會被評估。謝謝! – 2009-01-03 04:51:42