Ich versuche, die folgende Scala Code kompilieren, um herauszufinden, warum?Scala Funktion akzeptiert verschiedene Arten
trait List[+A]
case object Nil extends List[Nothing]
case class Cons[+A](head: A, tail: List[A]) extends List[A]
def map[A, B](as: List[A])(f: A => B): List[B] = as match {
case Nil => Nil
case Cons(x, xs) => Cons(f(x), map(xs)(f))
}
def tester[A, B](as: List[A])(f1: A => List[B]) = map(as)(f1)
Gemäß meinem Verständnis tester
sollte nicht kompiliert werden, weil die Definition von map
sagt es zwei Parameter akzeptiert: eine Liste Liste eine Funktion vom Typ A => B
.
jedoch in tester
Funktion habe ich Funktion f1
die vom Typ ist A => List[B]
, so, wie die Art des Ungleichgewichts Argumente, dachte ich, dass der Compiler Fehler auslösen sollte. Aber der Code ist in Ordnung.
Könnten Sie mir bitte helfen, zu verstehen, warum der Code hier kompiliert?
'.map' sollte einen Typparameter' A' erklären, andernfalls wird man den Typ-Parameter 'A' am Zug Ebene Schatten (und ist ohnehin in diesem Fall nutzlos) – cchantep
@cchantep' map' ist außerhalb des Merkmals. – HTNW