scala - 我可以重载 curry 方法吗?

标签 scala

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

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

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

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

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

最佳答案

您不能为此使用重载,因为由于柯里化(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!"))
  }
}

关于scala - 我可以重载 curry 方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9268876/

相关文章:

scala - 为什么 ScalaVersion 设置为 2.11 的 sbt 项目也会加载 2.10

Scala类型不匹配问题(预期Map,发现scala.collection.mutable.HashMap)

Scala - 获取函数名称

scala - 如何在 Scala 中使用 switch/case(简单模式匹配)?

scala - 如何在 Scala 中使用逻辑 'OR' 运算符和 "should be"?

json - 使用 Circe 转换 JSON

generics - Scala:将泛型类型参数约束为另一个参数中的类型

list - 将 map 转换为排序列表

scala - 使用 Spark DStream 作为 Akka 流的源的惯用方式

scala - 在 Spark Scala 中禁用科学计数法