Вы можете, по крайней мере, автоматически связать свои функции так, чтобы вы могли определить действительную функцию (например, add
), принимающую обычный список параметров:
object Add extends Cache[(Int, Int),Int]{
def add (a:Int,b:Int):Int = a+b
def _calc(t:(Int, Int)) = add _ tupled t
}
Вызовите его через Add.calc(3, 5)
Редактировать: Или использовать этот способ для реализации Cache2 ... CacheN без повторения всего кода Cache.
trait Cache2[A, B, C] extends Cache [(A,B), C] {
def _calc2(a: A, b: B):C
def _calc(t:(A,B)) = _calc2 _ tupled t
}
И снова
object Add2 extends Cache2[Int,Int,Int] {
def _calc2(a:Int, b:Int) = a+b
}
и Add2.calc(3, 5)