Я хотел бы понять, почему эта-расширение (§6.26.5) не работает для перегруженных методов. Например, если у меня есть два метода:
def d1(a: Int, b: Int) {}
def r[A, B](delegate: (A, B) ⇒ Unit) {}
Я могу это сделать:
r(d1)
Но при перегрузке r
он больше не будет работать:
def r[A, B](delegate: (A, B) ⇒ Unit) {}
def r[A, B, C](delegate: (A, B, C) ⇒ Unit) {}
r(d1) // no longer compiles
и я должен явно преобразовать метод в частично прикладную функцию:
r(d1 _)
Есть ли способ выполнить следующее с явным преобразованием?
def r[A, B](delegate: (A, B) ⇒ Unit) {}
def r[A, B, C](delegate: (A, B, C) ⇒ Unit) {}
def d1(a: Int, b: Int) {}
def d2(a: Int, b: Int, c: Int) {}
r(d1) // only compiles with r(d1 _)
r(d2) // only compiles with r(d2 _)
Существует несколько схожий question, но это не полностью объяснено.