2017-02-09 50 views
-1

我正在學習Scala並在代碼下運行。我知道函數,不返回任何東西是Scala中的過程,但是當在代碼下面運行時爲什麼extra()會輸出。在這裏的過程中,我只是打印'價值'的價值。 有人可以解釋這一點。Scala程序和功能差異

class Sample{ 
    private var value = 1 
    def test() {value += 2; println(value)} 
    def test2() = value 
} 

object Main2 extends App { 
    val my_counter = new Sample() 
    println(my_counter.test()) 
    println(my_counter.test2()) 

} 

3 
() 
3 
+1

第一個只是棄用。 – ipoteka

回答

2

所謂「過程的語法」僅僅是「語法糖」對於返回Unit(你會打電話void在Java中的)的方法。

def sayHello(toWhom: String) { 
    println(s"hello $toWhom") 
} 

在語義上等效(和獲得實際翻譯)到:

def sayHello(toWhom: String): Unit = { 
    println(s"hello $toWhom") 
} 

通知明確類型和方法簽名後立即上了等號。

類型Unit有一個單獨的值,它被寫入()(和讀取單位,就像它的類型)。這就是你所看到的:方法test打印value,然後生成()類型Unit,然後您將繼續在屏幕上自行打印。

正如註釋中所述,「過程語法」已被棄用,並且將在未來版本的語言中刪除。

2

過程語法編譯爲返回單位的方法。

調用toString上Unit產生"()"

您打印出測試的結果(這是Unit),所以你看到它的字符串表示,()輸出。