Angesichts dieses Scala-Codes:
%Vor%Der Aufruf von byval (5) wird korrekt kompiliert, aber byname kann nicht kompiliert werden:
%Vor%Warum? Ich würde erwarten, das gleiche Verhalten für by-value und by-Name-Parameter in Bezug auf Überlastung zu beobachten ... Wie kann es behoben werden?
Das liegt daran, dass JVM keinen "by-name" -Parameter unterstützt, daher muss Scala es auf andere Weise implementieren. => X
kompiliert tatsächlich zu einem Function0[X]
, das auf Function0[Object]
löscht, was es für Scala unmöglich macht, zwei Methoden zu unterscheiden, die sich nur durch den erwarteten Typ eines by-name Parameters unterscheiden.
Mögliche Problemumgehung ohne Überladung (zusätzlich zu dem, was bereits erwähnt wurde), wenn Sie keine anderen Methodennamen verwenden möchten:
%Vor%Tags und Links scala overloading pass-by-name