Идиоматическая карта Скала - PullRequest
26 голосов
/ 03 января 2009

Я работаю с картой в Scala и делаю обычное «если с ключом нет значения, создайте его, поместите в карту и верните»:

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 (), чтобы вставить новое значение и вернуть его. Хотя не уверен.

Спасибо!

1 Ответ

33 голосов
/ 03 января 2009

mutable.Map имеет V):V" rel="nofollow noreferrer">getOrElseUpdate, который делает именно то, что вы хотите, идиомы не нужны.

...