2016-06-28 57 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