相关疑难解决方法(0)

在Scala中使用重载方法在方法和函数之间进行扩展

我想了解为什么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)

methods scala function implicit-conversion

17
推荐指数
1
解决办法
1818
查看次数

标签 统计

function ×1

implicit-conversion ×1

methods ×1

scala ×1