2009-10-05 69 views
2

我寫我的第一個樣本斯卡拉程序,它看起來像這樣:斯卡拉額外的括號打印

def main(args: Array[String]) {  
    def f1 = println("aprintln") 
    println("applying f1") 
    println((f1 _).apply) 
    println("done applying f1") 
} 

輸出是

​​

有人能解釋爲什麼這些額外的()出現?我以爲只是打印出來。

感謝,

傑夫

回答

5

這將解決這個問題:

def main(args: Array[String]) {   
    def f1 = println("aprintln") 
    println("applying f1") 
    (f1 _).apply 
    println("done applying f1") 
}

,因此將這樣的:

def main(args: Array[String]) {   
    def f1 = "aprintln" 
    println("applying f1") 
    println((f1 _).apply) 
    println("done applying f1") 
}

這是怎麼回事這裏是您正在執行的功能f1與調用apply。功能f1打印出'aprintln',並返回()。然後您將f1的輸出()傳遞給另一個呼叫println。這就是爲什麼你在控制檯上看到一對額外的parans。

空括號在Scala中的類型爲Unit,這相當於Java中的void。

+0

啊,是的,我很愚蠢。我沒有想到,因爲Java編譯器不會讓我這樣做。謝謝。 – 2009-10-05 11:57:31

2

中的方法將有一個void返回類型在Java中有單位在斯卡拉返回類型。 ()是你如何寫單位的價值。

在你的代碼中,f1直接調用println。所以,當你調用f1並將結果傳遞給println時,你都會在f1的主體中打印一個字符串,並打印出結果,並將結果作爲()調用。

+0

有道理,並與其他答案一致。謝謝。 – 2009-10-05 11:58:05