我寫我的第一個樣本斯卡拉程序,它看起來像這樣:斯卡拉額外的括號打印
def main(args: Array[String]) {
def f1 = println("aprintln")
println("applying f1")
println((f1 _).apply)
println("done applying f1")
}
輸出是
有人能解釋爲什麼這些額外的()出現?我以爲只是打印出來。
感謝,
傑夫
我寫我的第一個樣本斯卡拉程序,它看起來像這樣:斯卡拉額外的括號打印
def main(args: Array[String]) {
def f1 = println("aprintln")
println("applying f1")
println((f1 _).apply)
println("done applying f1")
}
輸出是
有人能解釋爲什麼這些額外的()出現?我以爲只是打印出來。
感謝,
傑夫
這將解決這個問題:
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。
中的方法將有一個void返回類型在Java中有單位在斯卡拉返回類型。 ()是你如何寫單位的價值。
在你的代碼中,f1直接調用println。所以,當你調用f1並將結果傳遞給println時,你都會在f1的主體中打印一個字符串,並打印出結果,並將結果作爲()調用。
有道理,並與其他答案一致。謝謝。 – 2009-10-05 11:58:05
啊,是的,我很愚蠢。我沒有想到,因爲Java編譯器不會讓我這樣做。謝謝。 – 2009-10-05 11:57:31