Scala 为什么这个代码没有终止
此代码:Scala 为什么这个代码没有终止,scala,Scala,此代码: object SpeedTest extends Application{ val l = (1 to 50).toList.par println("par done") var counter = 0; for(e <- l){ counter + 1 } println("Finished") } 这会终止,所以扩展应用程序可能会产生不利影响 更新2: 我的设置: Version: Kepler Service Release
object SpeedTest extends Application{
val l = (1 to 50).toList.par
println("par done")
var counter = 0;
for(e <- l){
counter + 1
}
println("Finished")
}
这会终止,所以扩展应用程序可能会产生不利影响
更新2:
我的设置:
Version: Kepler Service Release 2
Build id: 20140224-0627
Java version : 1.6
Scala version : 2.10.4
正如Ben Reich所说,这可能是一个REPL错误,我认为这是一个由于某种“递归死锁”而发生的错误。如果我将计数器变量移动到另一个对象中,我可以使其工作,如下所示:
object Somes{ var counter = 0}
object SpeedTest{
val l = (1 to 7).toList.par
println("par done")
var counter = 0;
for(e <- l){
println("loop start for " + e)
Somes.counter + 1
println("loop done for " + e)
}
println("Finished")
}
objectsomes{var counter=0}
物体速度测试{
Vall=(1到7)
println(“par done”)
var计数器=0;
例如(e)我不熟悉scala,但我很感兴趣,所以请原谅这个愚蠢的问题。我不明白这是如何多线程的?(怎么会有死锁?)我假设每个循环都是a?在scala中,e
和计数器可以有任何交互吗?范围没有toList?所以不确定它是如何工作的。这对我来说是有效的。你的设置是什么?@carlosbuibeiescas.par
将列表变成了一个。@ggovan我用setupThank编辑了一个问题,我还发布了一个问题的更新,这个问题也是导致代码终止
object Somes{ var counter = 0}
object SpeedTest{
val l = (1 to 7).toList.par
println("par done")
var counter = 0;
for(e <- l){
println("loop start for " + e)
Somes.counter + 1
println("loop done for " + e)
}
println("Finished")
}