Say Tengo una función de tomar un argumentoScala transformación función
def fun(x: Int) = x
Basado en eso, quiero generar una nueva función con la misma convención de llamada, pero que voy a aplicar un poco de transformación de sus argumentos antes de delegar a la función original. Por eso, pude
def wrap_fun(f: (Int) => Int) = (x: Int) => f(x * 2)
wrap_fun(fun)(2) // 4
¿Cómo puede uno ir haciendo lo mismo, con excepción de las funciones de cualquier aridad que sólo tiene la parte de los argumentos para aplicar la transformación en común?
def fun1(x: Int, y: Int) = x
def fun2(x: Int, foo: Map[Int,Str], bar: Seq[Seq[Int]]) = x
wrap_fun(fun1)(2, 4) // 4
wrap_fun(fun2)(2, Map(), Seq()) // 4
¿Cómo sería una definición wrap_fun
haciendo las invocaciones anteriores funciona parecerse?
Fwiw, tales cosas pueden ser realmente simples en los lenguajes dinámicos: http://ideone.com/MYP2W. – missingfaktor