scala - 我可以超载curried方法吗?

时间:2012-02-13 22:17:10

标签: scala

有没有办法在Scala中重载多个参数列表的方法?例如。我想这样做:

def foo(a: Int)(b: Int)(c: Int): Int

def foo(a: Int)(b: Int): Int

我可以像这样定义它,但尝试调用第二种方法:

foo(1)(1)

使编译器抱怨“对重载定义的模糊引用”,这似乎是合理的。有没有办法实现这样的事情?例如,在某些情况下,最后一个参数可能被认为是可选的。

1 个答案:

答案 0 :(得分:8)

你不能为此使用重载,因为由于currying会有两种foo方法只有它们的返回类型不同。

您可以使用Scala 2.8的optional and named parameters来估算此值,但您必须将该方法称为foo(1)(1)()。如,

object Hello {
  def foo(a : String = "Hello,") : String = a

  def main(args: Array[String]) {
    println(foo() + foo(" world!"))
  }
}