4
は私がtuplingトリックを使用して、任意のアリティの機能をサポートし、次の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)
これはかなりclunkyです。理想的な構文は、次のようになります。
class Moo extends Foo[(Int, Int), Int] {
def pullImpl(x: Int, y:Int):Int = x + y
}
これを達成するために私の基本クラスを定義する方法はありますか?あなたはこの方法ではなく、関数として実装を定義して満足することができる場合