Warum scala nicht Typ von generischen Typparametern ableitet?

8

Angenommen diese Funktion

%Vor%

Warum dieser Code nicht kompiliert:

%Vor%

Aber dieses tut:

%Vor%

Oder

%Vor%

Während a type aus einer Liste abgeleitet werden kann, die List von Int ist. Warum schließt Scala hier nicht auf den Typ?

Gibt es einen anderen Weg?

    
Amir Karimi 15.01.2014, 19:57
quelle

1 Antwort

10

Es gibt einen anderen Weg! Es macht auch für einige nette syntatic Zucker:

%Vor%

das wie folgt aussieht:

%Vor%

Der Grund dafür, dass Sie die Typinformationen nicht so erhalten, wie Sie es erwarten würden, liegt darin, dass die Typinformationen in Scala von links nach rechts sind. In anderen Systemen sind Typinformationen bekannt und werden für die Verwendung abgeleitet, wo sie definiert sind. Manchmal müssen Sie diese Einschränkungen umgehen, aber in diesem Fall können Sie mit etwas arbeiten, das Ihrer eigenen definierten Kontrollstruktur ähnelt.

Also ...

%Vor%

Dies ist auch ein altes "Problem", das Sie hier sehen können SI-4773 .

Antwort auf Q in Kommentar :

Wenn du Seq[A => B] haben willst, dann würde ich etwas ähnliches tun wie

%Vor%

welches varargs verwendet (übersetzt in ein WrappedArray , also das map ), um eine Liste von Befehlen zu akzeptieren, so dass Sie

übergeben können %Vor%

soweit es herauszieht und an was Sie weitergegeben haben:

%Vor%

Dabei verwenden Sie die case -Anweisung, um eine Übereinstimmung zu finden und das Tupel zu extrahieren.

    
wheaties 15.01.2014, 20:05
quelle

Tags und Links