Эта-расширение между методами и функциями с перегруженными методами в 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 _)

Там что-то похожеевопрос, но это не полностью объяснено.

Ответы на вопрос(1)

Ваш ответ на вопрос