4
假設我有以下類Foo,即使用幾倍特技支持任何元數的一個函數:Scala的通用類支撐功能
abstract class Foo[T, R] {
def pull: T => R
}
我可以定義使用以下語法的子類:
implicit def function2Tofunction1[T1, T2, R](f: (T1, T2) => R): ((T1, T2)) => R = {
f.tupled
}
class Moo extends Foo[(Int, Int), Int] {
def pullImpl(x: Int, y:Int):Int = x + y
def pull = (pullImpl _) // implicit converts to tupled form
}
val m = new Moo()
m.pull(4, 5)
這非常笨重。理想的語法將如下所示:
class Moo extends Foo[(Int, Int), Int] {
def pullImpl(x: Int, y:Int):Int = x + y
}
有什麼辦法來定義我的基類,從而可以做到這一點?