scala - Могу ли я перегружать карри методы? - PullRequest
9 голосов
/ 14 февраля 2012

Есть ли способ перегрузить методы в Scala, которые принимают несколько списков параметров?Например, я хотел бы сделать это:

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

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

Я могу определить это так, но попытка вызвать второй метод так:

foo(1)(1)

заставляет компилятор жаловаться на "неоднозначная ссылка на «перегруженное определение», что представляется оправданным.Есть ли способ добиться чего-то подобного?Последний параметр может считаться необязательным в некоторых случаях, например.

1 Ответ

8 голосов
/ 14 февраля 2012

Вы не можете использовать перегрузку для этого, так как из-за каррирования будет два foo метода, отличающихся только типом возврата.

Вы можете использовать необязательные и именованные параметры Scala 2.8 для аппроксимации, но вам придется вызывать метод как foo(1)(1)(). Например.,

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

  def main(args: Array[String]) {
    println(foo() + foo(" world!"))
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...