2015-10-10 159 views
1

我是新來的scala。當我運行下面的代碼:混淆println輸出順序

object HelloWorld { 

    def main(args:Array[String]): Unit = 

    println("1" + (1 to 4)) 

    println("2" + (1 to 4)) 

    Thread.sleep(100) 

    for(x <- (1 to 4)) { 

     println(inc(x) + " " + inc_sq(x, 4)) 

    } 

    def inc(i:Int): Int = i + 1 

    def inc_sq(i:Int, r:Int): Int = 

    (i+r) * (i+r) 

} 

我得到了放:

2Range(1, 2, 3, 4) 
2 25 
3 36 
4 49 
5 64 
1Range(1, 2, 3, 4) 

爲什麼在這樣的障礙? 我的意思是我認爲實際輸出的最後一行應該在第一行。

我在Eclipse中使用Mac和Scala。

回答

7

您在main塊的周圍缺少一組括號,導致只有println("1" + (1 to 4))成爲main的主體。其餘部分作爲object Helloworld初始化的一部分執行。我相信,你的意圖是這樣的:

object HelloWorld { 

    def main(args: Array[String]): Unit = { 

    println("1" + (1 to 4)) 

    println("2" + (1 to 4)) 

    Thread.sleep(100) 

    for (x <- (1 to 4)) { 

     println(inc(x) + " " + inc_sq(x, 4)) 

    } 
    } 

    def inc(i: Int): Int = i + 1 

    def inc_sq(i: Int, r: Int): Int = 

    (i + r) * (i + r) 

} 
+0

什麼錯誤!非常感謝你! – DDragon

+0

如果這可以解決您的問題,我會很感激,如果你可以標記答案被接受。謝謝。 –