【问题标题】:Is it illegal to overload methods with multiple parameter lists? [duplicate]使用多个参数列表重载方法是否违法? [复制]
【发布时间】:2016-07-18 14:53:55
【问题描述】:

试图定义两个名为foo 的方法,一个带有两个参数列表,另一个只有一个。似乎不起作用:

object Bar { 
  def foo(a: Int)(b: Int): Int = a+b
  def foo(a: Int): Int = foo(a)(0)
 }
error: ambiguous reference to overloaded definition,
both method foo in object Bar of type (a: Int)Int
and  method foo in object Bar of type (a: Int)(b: Int)Int
match argument types (Int)
      def foo(a: Int): Int = foo(a)(0)
                             ^

???不,他们没有……

【问题讨论】:

  • Bar.foo(1) 会调用两者中的哪一个?
  • @pedrofurla 显然它会调用带有单个参数列表的那个。
  • @Dima 链接在页面顶部。
  • @m-z 对不起......不知道我怎么错过了

标签: scala overloading


【解决方案1】:

您可以轻松地定义一个默认参数,而不是手动重载您的函数。正如错误消息已经告诉您的那样,引用不明确,因此被禁止。

这是带有默认参数的函数:

def foo(a: Int)(b: Int = 0): Int = a+b

【讨论】:

  • 我知道 :) 但它并不完全相同,因为使用默认参数,我仍然必须像 foo(a)() 一样调用它,而我想要的只是 foo(a)。
猜你喜欢
  • 2015-04-12
  • 2014-03-20
  • 2018-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多