Ich folgte dem Ratschlag here, um eine Funktion namens Quadrat zu definieren, und versuchte dann, es an eine doppelt aufgerufene Funktion zu übergeben. Die Funktionen sind wie folgt definiert:Übergeben von Funktionen für alle anwendbaren Typen um
def square[T](n: T)(implicit numeric: Numeric[T]): T = numeric.times(n, n)
def twice[T](f: (T) => T, a: T): T = f(f(a))
Wenn zweimal Aufruf (quadratisch, 2), spuckt die REPL eine Fehlermeldung aus:
scala> twice(square, 2)
<console>:8: error: could not find implicit value for parameter numeric: Numeric[T]
twice(square, 2)
^
jedermann?
+1. Nizza: "es verwendet nur Informationen von einer Parameterliste zur nächsten, aber nicht von einem Parameter zum nächsten" – pedrofurla
danke für die klare Erklärung. Also ist Inferenz in der Tat unabhängig für Parameter innerhalb einer Liste ... aber, äh, warum ...? ;-) Ich sollte hinzufügen, dass das keine ganz ernst gemeinte Frage ist, da ich vermute, dass hier eine Antwort in These-Länge lauern könnte. –
@Andrew Ich schätze Leistung. Es ist schwer genug, einen Typ zu bestimmen - was hier erforderlich wäre, wäre es, zwei Typen zu vereinheitlichen und dann ihre Schlussfolgerung zu finden. Das ist es, was Sprachen mit voller Typinferenz machen, aber nach Odersky ist es ein schweres Problem, es mit Sprachen mit einem Typsystem auf Augenhöhe mit Scala richtig zu machen. –