Die Regeln dafür sind in Abschnitt 8.5 "Pattern Matching Anonymous Functions" der Scala Language Specification definiert. Wenn Sie eine anonyme Funktion mit Mustererkennung verwenden, muss der Typ teilweise bereitgestellt werden. Sie tun das, indem Sie sagen, der Typ ist (Double, Double) => Double
, die Abkürzung für Function2[Double, Double, Double]
ist.
Jetzt:
Wenn der erwartete Typ ist scala.Function k [S1,…,Sk, R]
, wird der Ausdruck entspricht die anonyme Funktion zu messen:
(x1:S1,…,xk:Sk) => (x1,…,xk) match {
case p1 => b1 … case pn => bn
}
egal Also, was die arity Ihrer Funktion, Die Musterübereinstimmung wird an ein Tupel der Argumente der Funktion übergeben. Daher können Sie die Syntax für reguläre Tupel-Extraktoren verwenden.
So Ihr Beispiel ist die Abkürzung für
val div: (Double, Double) => Double = (a, b) => (a, b) match {
case (x, y) if y != 0 => x/y
}
oder
val div = (a: Double, b: Double) => (a, b) match {
case (x, y) if y != 0 => x/y
}
Die der Extraktor-Parameter Benennung x
und y
bis zu Ihrer Phantasie. Sie entscheiden, wie Sie die resultierenden Elemente des Extraktors aufrufen, Sie könnten auch case (foo, bar) => ...
schreiben