为什么immutable.ParMap.mapValues返回ParMap而不是immutable.ParMap?

威尔·斯金纳

在我的Scala 2.11.6应用程序中,我定义了一个immutable.ParMap类似的代码:

  object Foos {
    val foos: immutable.ParMap[String, Foo] = immutable.ParMap(
     ...
    )
  }

稍后,我想immutable.ParMap使用相同的键创建一个新的键,因此我使用mapValues

 val fooServices: immutable.ParMap[String, FooService] = Exchanges.exchanges mapValues (_.fooService)

Scala抱怨

类型ParMap [String,FooService]的表达式不符合预期的类型ParMap [String,FooService]。

作为解决方法,我可以使用for理解,编译器允许:

val fooServices: immutable.ParMap[String, FooService] =
    for ((name, ex) <- Foos.foos) yield name -> foo.fooService

但是,能够使用专为该确切任务而设计的库函数会很不错。为什么mapValues在这里不能推断出最具体的类型?

雷克斯·克尔

推断最具体的类型不是问题。它实际上是的实例scala.collection.parallel.ParMapLike$$anon$2,是基础地图的视图(创建的地图将所有操作转发到原始地图)。

本来可以为不可变和可变的分支分别创建的,但是要在库中更好地共享代码,只需在中创建一次即可ParMapLike因此,返回类型是正确的,因为不可变的类型.mapValues与可变的类型相同.mapValues

如果您不想要视图(实现为代理),而是想要真正地重新生成集合,请map改为使用xs.mapValues(v => f(v))成为xs.map{ case (k,v) => (k, f(v)) },然后ParMap将这样生成并键入新的不可变项

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么immutable.ParMap.mapValues返回ParMap而不是immutable.ParMap?

来自分类Dev

关于“ parMap”的推理

来自分类Dev

Haskell parMap性能?

来自分类Dev

为什么 Immutable.js 记录中的数组是可变的?

来自分类Dev

Ramda.map over Immutable.List 如何返回 List 而不是 Array?

来自分类Dev

Immutable.js-toJS不是函数

来自分类Dev

为什么返回null而不是值?

来自分类Dev

为什么android返回Editable而不是String?

来自分类Dev

为什么addEventListener返回不是函数

来自分类Dev

为什么getCell()返回“ Range”而不是值?

来自分类Dev

为什么findOneBy返回null而不是结果?

来自分类Dev

为什么返回None而不是True或False?

来自分类Dev

为什么[ALT + 224]返回Ó而不是alpha?

来自分类Dev

为什么addEventListener返回不是函数

来自分类Dev

为什么 strcpy 返回 char * 而不是 char

来自分类Dev

什么是React shouldComponentUpdate与immutable.js的最佳实现

来自分类Dev

java中的immutable和final有什么区别?

来自分类Dev

.equals()在immutable.js中有什么复杂度

来自分类Dev

Immutable.Set.contains返回false

来自分类Dev

什么时候在方法中返回“ this”而不是“ void”,为什么?

来自分类Dev

为什么不是'|' 被超载?

来自分类Dev

返回(空)而不是返回空-为什么要加上括号?

来自分类Dev

为什么GetThreadTimes返回

来自分类Dev

为什么返回元组?

来自分类Dev

为什么返回零?

来自分类Dev

为什么operator =返回* this?

来自分类Dev

为什么返回0?

来自分类Dev

为什么返回的JSON被理解为unicode而不是列表?

来自分类Dev

为什么我的jQuery小部件返回“对象不是函数”?