2012-06-15 18 views
10

Scala'da anonim ve küfürlü bir işlevi nasıl oluşturabilirim? Aşağıdaki ikisi başarısız oldu:Scala'da curried anonim işlevler nasıl oluşturabilirim?

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 
      ^

cevap

17

Kıvrımlı bir işlev oluşturmak için, onu çok işlevliymiş gibi yazın (aslında durum ;-)).

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

Bu, Int'den Int'ten Int'e bir işlev arasında bir işleve sahip olduğunuz anlamına gelir.

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

alternatif şöyle yazabiliriz:

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

son ifadesi adlandırılmış fonksiyonudur, anonim işleviyle aynı yazabilir nasıl? –

+0

Son ifadede, "=>" simgesi nasıl çalışıyor? x => y => x * y –

+0

İşlevi geçmek istediğiniz bir şeyiniz olmalı. foo (f: Int => Int => Int) 'gibi bir yöntem/işleviniz varsa, bunu foo (x => y => x * y)' gibi çağırabilirsiniz. – drexin

İlgili konular