Bunun kuralları, Scala Language Spesifikasyonu'nun 8.5 "Pattern Matching Anonymous Functions" bölümünde tanımlanmıştır. Desen eşleştirmesiyle anonim bir işlev kullanılıyorsa, türün kısmen sağlanmış olması gerekir. Bunu, Function2[Double, Double, Double]
için kestirme olan tür (Double, Double) => Double
olduğunu söyleyerek yaparsınız. Şimdi
:
beklenen tip scala.Function k [S1,…,Sk, R]
ise, ifadesi anonim işlevine eşdeğer olarak alınır:
(x1:S1,…,xk:Sk) => (x1,…,xk) match {
case p1 => b1 … case pn => bn
}
Yani olursa olsun
ne fonksiyonunun Arity, desen eşleşmesi, işlevin argümanlarının bir tuple'sından geçirilir, dolayısıyla düzenli tuple extractor sözdizimini kullanabilirsiniz.
Yani örnek x
ve y
hayal gücüne kalmıştır çıkarıcı parametrelerinin adlandırma
val div: (Double, Double) => Double = (a, b) => (a, b) match {
case (x, y) if y != 0 => x/y
}
veya
val div = (a: Double, b: Double) => (a, b) match {
case (x, y) if y != 0 => x/y
}
için kısa. Ekstraktörün ortaya çıkan elemanlarını nasıl arayacağınıza karar verirseniz, case (foo, bar) => ...
yazabilirsiniz.