Ich habe in Scala gehört, dass ich _
als "anonymer Parameter" in der anonymen Funktion verwenden kann:
Aber dieser Code kann nicht kompiliert werden:
%Vor%Und das kann:
%Vor% Es scheint über Typschlussfolgerung zu sein. Aber wie könnte x => x
mehr Informationen liefern als _
?
Das Problem hier ist keine Typrückschluss.
Wie Sie aus dem äquivalenten Code der Fehlermeldung für s.map(_)
sehen, ist nicht s.map(x => x)
, aber dies:
Genau wie print(_)
(tatsächlich Predef.print(_)
) bedeutet i => Predef.print(i)
.
Oder wie "a" + _
bedeutet "a".+(_)
bedeutet s => "a".+(s)
.
Dies macht im aktuellen Kontext einfach keinen Sinn.
Nehmen wir an, Sie haben eine Liste von Funktionen String => String
( fs
) und Sie möchten alle diese Funktionen auf die Liste von String
anwenden. Du benutzt diesen Code:
oder nur das:
%Vor% Zusatz: Sie könnten stattdessen identity
method verwenden, wenn x => x
. Es wird standardmäßig importiert, aber Sie könnten es noch kürzer machen, indem Sie den Import hinzufügen:
Beachten Sie, dass identity
ein bekannter Name ist, also sollten Sie ihn im Team anstelle Ihrer Aliase verwenden.
Es scheint über Typschlussfolgerung zu sein. Aber wie könnte x = & gt; x liefern mehr Informationen als _?
x = & gt; x ist ein Typ von Function1, der von der Map-Funktion als Parameter erwartet wird. Der Compiler kann nicht schließen, dass die anonyme Variable _ vom Typ T tatsächlich eine Funktion1 ist.
Tags und Links scala type-inference