Ich bin gerade in eine seltsame Disparität zwischen Funktionen und Objekten geraten (Scala 2.10):
%Vor%Warum gibt es einen Unterschied zwischen Defs / Lambda Literalen und Lambda Vals?
Update: Offensichtlich tritt das Problem nicht für binäre Funktionen auf: Die implizite Konvertierung einer Funktion in eine Funktion zweiter Ordnung funktioniert nur, wenn die zu konvertierende Funktion mindestens zwei Parameter hat
Ich habe das überprüft, und tatsächlich funktioniert der folgende Code:
%Vor%Ebenso stellen Nullfunktionen kein Problem dar:
%Vor%Also, umformuliere die Frage: Warum funktioniert das nicht für UNARY Methoden und Funktionen?
Update: Das Problem hängt offenbar auch mit dem Zieltyp zusammen (der Typ von fs Argument h). Folgendes funktioniert auch (diesmal zugunsten von "Eta-Expansion zählt als Hop", weil wir einen Methodenwert aus einem using _)
erzeugen müssen %Vor% In scala defs
sind methods
und unterscheiden sich von functions
.
Sie können method
in function
konvertieren, indem Sie sie teilweise anwenden.
Also ... du kannst,
%Vor%Alse, wie @ srgfed01 in seinem Kommentar erwähnt ... für den zweiten Fall ist das Problem, dass ... sie Typen nicht explizit angegeben sind, wenn Sie den Typ richtig angeben ... der zweite Fall wird funktionieren.
%Vor%oder
%Vor% Nun zu den Unterschieden zwischen methods
und functions
...
Sie können method
ohne Argumente ohne Klammern ()
... aufrufen, aber Sie können keine Funktion ohne ()
aufrufen.
Einer der wichtigsten Gründe dafür, dass methods
sich von functions
unterscheidet, liegt darin, dass die Entwickler von Scala eine nahtlose Interoperabilität mit Java anstrebten, ohne an den Einschränkungen von Java festzuhalten.
So methods
( def
) sind sehr ähnlich wie Java methods
und% functions
ist anders als methods
aktiviert sie mit grenzenloser Freiheit Scala zu erstellen, so wie sie es wollten.
Auch ... Ein weiterer wichtiger Unterschied ist, dass methods
Type-classes
annehmen kann, wo functions
nicht. Grundsätzlich können Sie generische methods
like
Jetzt können Sie eine generische Methode definieren,
%Vor%Aber Sie können eine Funktion wie diese nicht definieren,
%Vor%oder wie das
%Vor%Tags und Links scala implicit-conversion implicit