2012-06-15 6 views
10

Come posso creare una funzione anonima e al curry in Scala? I seguenti due non sono riusciti:Come posso creare una funzione anonima al curry in 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 
      ^

risposta

17

Per creare una funzione al curry, scriverlo come se si trattasse di più funzioni (in realtà è il caso ;-)).

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

Questo significa che hai una funzione da Int a una funzione da int a Int.

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

in alternativa si può scrivere in questo modo:

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

L'ultima espressione è una funzione denominata, come possiamo scrivere la stessa di una funzione anonima? –

+0

Nell'ultima espressione, come funziona il simbolo "=>"? x => y => x * y –

+0

Devi avere qualcosa a cui vuoi passare la funzione. se hai un metodo/funzione come 'def foo (f: Int => Int => Int)' puoi chiamarlo come 'foo (x => y => x * y)'. – drexin