Wie spezialisiert man ein typeparametriertes Argument auf mehrere verschiedene Typen in Scala?

8

Ich brauche einen Back-Check (bitte).

In einem Artikel ( Ссылка ) habe ich gerade I geschrieben Ich bin der Ansicht, dass ich an Scala glaube, dass Sie keine Funktion angeben können, die ein Argument übernimmt, das selbst eine Funktion mit einem ungebundenen Typparameter ist. Ich habe diese Frage bearbeitet, um das Beispiel zu vereinfachen.

Der folgende Code funktioniert, indem ein Merkmal GenericFn eingeführt wird, das das Merkmal Scala Function1 nachahmt, außer dass es in der Funktion einen freien Typ-Parameter hat:

%Vor%

Das funktioniert, aber gibt es eine Möglichkeit, dies ohne das Merkmal GenericFn zu tun (verwenden Sie eine Standardfunktionsnotation)? Zum Beispiel schlägt der folgende Code mit dem Kompilierzeitfehler fehl: "type mismatch; found: TypeExample2.A erforderlich: _ $ 1 where type _ $ 1 & lt ;: TypeExample2.NumberBase":

%Vor%     
jmount 15.06.2010, 18:19
quelle

1 Antwort

2

Wiederholen Sie die anfängliche Motivation für die Frage: Wir wollen einem Wert 'g' einen Typ geben, weil wir ihn weitergeben wollen. Scala-Werte (natürlich) können keinen polymorphen Typ haben, auch wenn sie Funktionswerte sind. So, wie man einen Typ gibt, wo ein Teil davon unbekannt ist?

Ich glaube also, eine Lösung ist die Verwendung von Platzhaltern (eine Form der existentiellen Abstraktion):

%Vor%

Die Prosa-Erklärung für den Typ von g ist: eine Funktion von Array [T] und Array [Double] zu Double, wobei T einige -Typen sind, die Double erweitern. "etwas" ist das Wort, das auf existenzielle Abstraktion hinweist, wir bitten darum, dass ein solcher Typ existiert, obwohl es uns an diesem Punkt egal ist, welcher es ist.

    
buraq 26.06.2010 09:47
quelle

Tags und Links