Scala中双方括号的用途是什么?

时间:2015-03-07 21:38:44

标签: scala

我有一个代码

object App {
  def main(args: Array[String]) = print {CL().f()()()}
}

case class CL() {
  def f()()() = 1
}

您可以看到方法调用f()()()。但是如果我执行f()它会返回相同的结果。

那么Scala中f()()()f()之间有什么区别?

1 个答案:

答案 0 :(得分:10)

在Scala中,方法可以有多个参数列表:

def f(x: Int)(y: Int, z: String)(w: Boolean) = "foo"
f(1)(2, "bar")(true) //returns "foo"

由于多种原因,多个参数列表很有用。您可以在this问题上详细了解它们。

同样在Scala中,可以选择省略空参数列表:

def f() = "foo"
f //returns "foo"

使用空参数列表的选择通常受约定的约束,如this问题中所述。

因此,如果您有多个空参数列表,则可以省略其中任何一个:

def f()()() = "foo"
f()()() //returns "foo"
f()() //returns "foo"
f() //returns "foo"
f //returns "foo"