我想了解为什么eta-expansion(§6.26.5)不适用于重载方法.例如,如果我有以下两种方法:
def d1(a: Int, b: Int) {}
def r[A, B](delegate: (A, B) ? Unit) {}
Run Code Online (Sandbox Code Playgroud)
我可以做这个:
r(d1)
Run Code Online (Sandbox Code Playgroud)
但是,当重载r时它将不再起作用:
def r[A, B](delegate: (A, B) ? Unit) {}
def r[A, B, C](delegate: (A, B, C) ? Unit) {}
r(d1) // no longer compiles
Run Code Online (Sandbox Code Playgroud)
我必须显式地将方法转换为部分应用的函数:
r(d1 _)
Run Code Online (Sandbox Code Playgroud)
有没有办法通过显式转换完成以下操作?
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) …Run Code Online (Sandbox Code Playgroud)