2009-01-03 105 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