Warum unterscheidet sich das Verhalten von Scala im Falle einer Überlastung mit Parametern für den Namen von dem Fall mit den Werten für den Wert?

8

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?

    
Jean-Philippe Pellet 01.12.2010, 14:00
quelle

2 Antworten

13

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.

    
Daniel C. Sobral 01.12.2010, 14:31
quelle
6

Mögliche Problemumgehung ohne Überladung (zusätzlich zu dem, was bereits erwähnt wurde), wenn Sie keine anderen Methodennamen verwenden möchten:

%Vor%     
Vasil Remeniuk 01.12.2010 15:02
quelle

Tags und Links