惯用的“获取或更新"对于 immutable.Map? [英] idiomatic "get or else update" for immutable.Map?
本文介绍了惯用的“获取或更新"对于 immutable.Map?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
对于 immutable.Map 实例,getOrElseUpdate 的惯用方式是什么?我使用下面的代码段,但它看起来冗长且效率低下
What is the idiomatic way of a getOrElseUpdate for immutable.Map instances?. I use the snippet below, but it seems verbose and inefficient
var map = Map[Key, Value]()
def foo(key: Key) = {
val value = map.getOrElse(key, new Value)
map += key -> value
value
}
推荐答案
让我总结一下您的问题:
Let me summarise your problem:
- 您想在不可变数据结构上调用方法
- 您希望它返回一些值并重新分配一个
var
- 因为数据结构是不可变的,所以你需要
- 返回一个新的不可变数据结构,或
- 使用提供的闭包在方法内部进行赋值
所以,要么你的签名看起来像
So, either your signature has to look like
def getOrElseUpdate(key: K): Tuple2[V, Map[K,V]] //... use it like val (v, m2) = getOrElseUpdate(k) map = m2
或
def getOrElseUpdate(key: K, setter: (Map[K,V]) => Unit): V //... use it like val v = getOrElseUpdate(k, map = _)
如果您可以接受这些解决方案中的一个,您可以添加您自己的带有隐式转换的版本,但仅从签名来看,我不认为这些都在标准库中.
If you can live with one of these solutions, you could add your own version with an implicit conversion but judging by the signatures alone, i wouldn’t think any of these is in the standard library.
这篇关于惯用的“获取或更新"对于 immutable.Map?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文