小编Luk*_*ron的帖子

Scala:对象初始化程序中的并行收集导致程序挂起

我刚刚注意到一种令人不安的行为.假设我有一个由单个对象组成的独立程序:

object ParCollectionInInitializerTest {
  def doSomething { println("Doing something") }

  for (i <- (1 to 2).par) {
    println("Inside loop: " + i)
    doSomething
  }

  def main(args: Array[String]) {
  }
}
Run Code Online (Sandbox Code Playgroud)

该程序是完全无辜的,当for循环中使用的范围不是并行的时,正确执行,输出如下:

内循环:1
做一些
内循环:2
做某事

不幸的是,当使用并行集合时,程序只是挂起而没有调用doSomething方法,所以输出如下:

内循环:2
内循环:1

然后该程序挂起.
这只是一个讨厌的bug吗?我正在使用scala-2.10.

scala scala-collections

17
推荐指数
1
解决办法
1970
查看次数

Scala:减少和折叠之间的函数类型推断的差异 - 可以做些什么吗?

假设我有一张空地图
val map = Map[Int, Int]()

我很困惑,因为以下代码编译正确:

map.foldLeft((0,0)){case((k1, v1), (k2, v2)) => (-1, -1)}
Run Code Online (Sandbox Code Playgroud)

以下,看似精确的代码片段导致编译错误:

map reduceLeft {case((k1, v1), (k2, v2)) => (-1, -1)}
Run Code Online (Sandbox Code Playgroud)

错误是:

scala> map reduceLeft {case((k1, v1), (k2, v2)) => (k1, v1)}
<console>:9: error: missing parameter type for expanded function
The argument types of an anonymous function must be fully known. (SLS 8.5)
Expected type was: (?, (Int, Int)) => ?
              map reduceLeft {case((k1, v1), (k2, v2)) => (k1, v1)}
Run Code Online (Sandbox Code Playgroud)

这不是一个大问题,但显然不必处理这个问题会很好.你对我能做些什么不同有什么想法,或者我只是必须学会接受它?

scala type-inference

4
推荐指数
1
解决办法
327
查看次数

标签 统计

scala ×2

scala-collections ×1

type-inference ×1