【发布时间】:2014-06-27 08:34:47
【问题描述】:
我经常发现自己在编写这样的代码:
import scala.collection.immutable._
var foos = Map.empty[Int, Foo]
def fooOf(n: Int): Foo = {
foos.get(n) match {
case Some(foo) => foo
case None =>
val foo = new Foo(n)
foos = foos.updated(n, foo)
foo
}
}
使用并发映射,代码看起来更漂亮:
import scala.collection.concurrent._
var foos = TrieMap.empty[Int, Foo]
def fooOf(n: Int): Foo = {
val foo = new Foo(n)
foos.putIfAbsent(n, foo) getOrElse foo
}
但我真的想要一个非并发、不可变的映射。有类似putIfAbsent 的东西吗?
(顺便说一句,在并发示例中,是否只有在确实不存在时才能创建Foo?)
【问题讨论】:
标签: scala collections map concurrency immutability