2016-06-28 136 views
0

這裏是the code that compiles如預期爲什麼沒有;相當於EOL?

def coarse_grained: Int = { 
    def fib: Int = List(1,2) sum ; 
    fib 
    } 

one which does not

def coarse_grained: Int = { 
    def fib: Int = List(1,2) sum 
    fib 
    } 

唯一的區別是在;sum

+0

是的,答案是合適的,但問題是具體的類型。我不重複有關類型的問題。我問一個普通的問題。所以,我的表述必須是首選的(或至少保留)。 –

+1

這裏的類型沒有什麼不同。你在後綴表示法中調用'List [T] .sum',但編譯器推斷它是中綴表示法,因此試圖做'List(1,2).sum(fib)',這使得' fib'方法返回'Unit',而不是'Int'。 –

+0

換句話說,這是一個解析的東西。類型是不相關的。 –

回答

4

如您所知,List(2,6,9).drop(1)也可以寫爲List(2,6,9) drop 1。事實上,它也可以這樣寫。

List(2,6,9) drop 
1 

編譯器不斷尋找最後一個參數,甚至超過換行符。所以如果你想這樣做List(1,2).sum像這樣List(1,2) sum,你需要使用分號;告訴編譯器停止尋找最終的參數。它不會來。

+1

而不是添加半,更通常的是添加一個空行(額外換行)。 –

+0

@ som-snytt,謝謝。我不知道。事實上,我絕不會使用其中一個(分號或空行)。點語法更清晰和更安全。 – jwvh