【问题标题】:scala - Can I overload curried methods?scala - 我可以重载咖喱方法吗?
【发布时间】:2012-02-13 22:17:09
【问题描述】:

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

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

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

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

foo(1)(1)

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

【问题讨论】:

    标签: scala


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2014-11-19
      • 1970-01-01
      • 2010-12-27
      • 1970-01-01
      • 1970-01-01
      • 2011-04-21
      • 2013-08-26
      • 2012-11-26
      • 1970-01-01
      相关资源
      最近更新 更多