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?
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
welches varargs verwendet (übersetzt in ein WrappedArray
, also das map
), um eine Liste von Befehlen zu akzeptieren, so dass Sie
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.
Tags und Links scala type-inference