scala – 惯用的“get or else update”为immutable.Map?
发布时间:2020-12-16 09:32:38 所属栏目:安全 来源:网络整理
导读:对于immutable.Map实例,getOrElseUpdate的惯用方式是什么?我使用下面的代码片段,但它似乎是冗长和低效的 var map = Map[Key,Value]()def foo(key: Key) = { val value = map.getOrElse(key,new Value) map += key - value value} 解决方法 让我总结一下你
对于immutable.Map实例,getOrElseUpdate的惯用方式是什么?我使用下面的代码片段,但它似乎是冗长和低效的
var map = Map[Key,Value]() def foo(key: Key) = { val value = map.getOrElse(key,new Value) map += key -> value value } 解决方法
让我总结一下你的问题:
>你想调用一个不可变数据结构的方法 >返回一个新的不可变数据结构,或者 所以,你的签名必须看起来像 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 = _) 如果您可以使用这些解决方案之一,您可以使用隐式转换添加您自己的版本,但是仅通过签名来判断,我不会认为任何这些都在标准库中。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |