我一直在用可变地图计算出现次数:
var bar = collection.mutable.Map[Int, Int]().withDefaultValue(0)
现在bar(a) += b工作得很好,无论密钥a是否bar已经存在(在这种情况下,它将被添加)。
我用可变映射的可变映射尝试了同样的事情:
var foo = collection.mutable.Map[Int, collection.mutable.Map[Int, Int]]().
withDefaultValue(collection.mutable.Map().withDefaultValue(0))
foo(a)(b) += x没有语法糖怎么看?
使用Scala 中的所有语法糖实例是什么?我假设它扩展到:
foo.apply(a).put(b, foo.apply(a).apply(b) + x)
但是,为什么这不会foo像介绍性示例中那样相应地更新自身(即,如果之前不存在key,foo则不会有专用的 key 值)?a
编辑:正如Perseids 指出的那样,foo(a)(b) += x将更改可变的默认值。这是一个理想的功能吗?按照DaoWengetOrElseUpdate的建议使用似乎是克服这两个问题的最佳方法。但是,虽然这对于 type 的函数很有效,但对于 type 的函数Int => Int => Int来说确实很麻烦Int => Int => Int => Int => Int。所以我仍然很高兴有任何建议!