为什么Curly括号不起作用而不是在scala中使用括号调用apply方法

时间:2015-08-07 20:09:52

标签: scala

AFAIK,在scala中,可以选择使用curly braces {}parenthesis ()向方法发送参数。

math.abs{-10}

def fx(x: Int) = x * x
fx{10}

List(1, 3, 5, 7) filter { _ > 5}

那么,为什么这不适用于对象List中的apply方法?

List.apply{"A", "B"}   // does not compile

1 个答案:

答案 0 :(得分:2)

当你调用一个方法时,你可以将参数传递给它或在括号内,或者如果只有一个参数则不传递参数。这里fx {10}传递一个没有括号的返回类型Int {10}。它相当于fx({10})

此处List(1, 3, 5, 7) filter { _ > 5}您还会在没有括号的情况下传递返回类型{ _ > 5}的块Int => Boolean

在上述两种情况下,最后一个块语句是合法表达式。

此处List.apply{"A", "B"}您在没有括号的情况下传递了一个块{"A", "B"},该块等同于List.apply({"A", "B"}),而"A", "B"语句在Scala中是非法的。