2012-06-15 24 views
10

¿Cómo puedo crear una función anónima y currificada en Scala? La siguiente dos intentos fallidos:¿Cómo puedo crear la función anónima curry en scala?

scala> (x:Int)(y:Int) => x*y 
<console>:1: error: not a legal formal parameter 
     (x:Int)(y:Int) => x*y 
      ^

scala> ((x:Int)(y:Int)) => x*y 
<console>:1: error: not a legal formal parameter 
     ((x:Int)(y:Int)) => x*y 
      ^

Respuesta

17

para crear una función curry escribir como si se tratara de múltiples funciones (que en realidad es el caso ;-)).

scala> (x: Int) => (y: Int) => x*y 
res2: Int => Int => Int = <function1> 

Esto significa que tiene una función de Int para una función de Int a Int.

scala> res2(3) 
res3: Int => Int = <function1> 

, alternativamente, se puede escribir así:

scala> val f: Int => Int => Int = x => y => x*y 
f: Int => Int => Int = <function1> 
+0

La última expresión es una función llamada, ¿cómo podemos escribir lo mismo que una función anónima? –

+0

En la última expresión, ¿cómo funciona el símbolo "=>"? x => y => x * y –

+0

Tienes que tener algo a lo que quieras pasarle la función. si tiene un método/función como 'def foo (f: Int => Int => Int)' puede llamarlo como 'foo (x => y => x * y)'. – drexin

Cuestiones relacionadas