2012-06-15 13 views
10

Jak mogę utworzyć funkcję anonimową i curry w Scali? Następujące dwa nie powiodły się:Jak mogę utworzyć curried anonimową funkcję w 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 
      ^

Odpowiedz

17

Aby utworzyć funkcję curry, należy ją zapisać tak, jakby była ona wieloma funkcjami (tak właśnie jest ;-)).

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

Oznacza to, że masz funkcję od Int do funkcji z Int INT.

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

alternatywnie można napisać tak:

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

Ostatnim wyrazem jest funkcja o nazwie, w jaki sposób możemy napisać taki sam jak anonimowej funkcji? –

+0

W ostatnim wyrażeniu, w jaki sposób działa symbol "=>"? x => y => x * y –

+0

Musisz mieć coś, do czego chcesz przekazać tę funkcję. jeśli masz metodę/funkcję taką jak 'def foo (f: Int => Int => Int)' możesz nazwać ją '' foo (x => y => x * y) '. – drexin

Powiązane problemy