Эта-расширение между методами и функциями с перегруженными методами в Scala
Я хотел бы понять, почему eta-расширение (§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 _)
Там что-то похожеевопрос, но это не полностью объяснено.