我刚刚注意到一种令人不安的行为.假设我有一个由单个对象组成的独立程序:
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.
假设我有一张空地图
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)
这不是一个大问题,但显然不必处理这个问题会很好.你对我能做些什么不同有什么想法,或者我只是必须学会接受它?