2016-12-01 91 views
0

我無意中鍵入「()」和結束時,我有一個代碼:
def printList(arg: List[String]) = arg foreach println()
和編譯
「def ... = arg.foreach.println()」和「def ... = arg.foreach.println」之間的返回類型有什麼區別?

/Users/Edward/Documents/Scala/try/try.scala:75: error: type mismatch 
found : Unit 
required: String => ? 

def printList(arg: List[String]): Unit = arg foreach println() 

                 ^

當它有錯誤但當我將其更改爲
def printList(arg: List[String]): Unit = arg foreach println
它編譯成功,爲什麼「()」會影響返回類型。

回答

4
arg foreach println 

...是語法糖...

arg.foreach(println) 

...這是本身的簡化...

arg.foreach(x => println(x)) 

當你鍵入println()您試圖調用沒有參數的方法,這是不正確的。當您鍵入println時,您正在引用該方法而不調用它。實際上,你正在做的是將它傳遞給foreach()方法,該方法在收集參數後調用println

+0

哦,我明白了。非常感謝。 – linjunshi

相關問題