Scala - Wie wähle ich explizit, welche überladene Methode verwendet werden soll, wenn ein Argument null sein muss?

8

Alle,

Ich mache einige Bildmanipulationen in Scala, indem ich BufferedImages und Raster Objekte verwende. Ich versuche, alle Pixel in dem gepufferten Bild mit dem folgenden Code zu erhalten.

%Vor%

Wenn ich jetzt relativ große Dateien lese, funktioniert das gut. Wenn ich 20x20 PNG-Dateien einlese, bekomme ich eine ArrayIndexOutOfBoundsException:

%Vor%

Ich habe online gelesen, dass die Lösung dieses Problems darin besteht, den pixelBuffer NICHT vorher zuzuweisen, aber übergeben Sie stattdessen einen Nullwert und verwenden Sie den von der Raster.getPixels-Methode zurückgegebenen Wert.

Hier ist mein Problem. Wenn ich naiv vorankomme und Nil als letztes Argument übergebe:

%Vor%

Ich bekomme den Fehler

%Vor%

Offensichtlich kann der Compiler nicht feststellen, welche der beiden Methoden ich aufrufen möchte; es ist mehrdeutig. Wenn ich Java verwenden würde, würde ich die Null setzen, um meine Absicht explizit zu machen. Ich kann mir nicht vorstellen, wie ich in Scala den gleichen Effekt erzielen kann. Dinge, die ich versucht habe:

%Vor%

Irgendeine Idee, wie man dem Compiler explizit sagt, dass ich die Methode mit dem Int-Array als letzten Parameter anstelle eines Float-Arrays haben möchte?

BEARBEITEN: Wie eine Antwort darauf hinweist, habe ich Nil mit Null vermischt. Nil ist eine leere Liste. Siehe den folgenden Blogeintrag

Auch sollte ich darauf hinweisen, dass die Ausnahme außerhalb des Bereichs meiner Fehler war (wie diese Dinge oft sind). Das Problem war, ich nahm an, dass das Raster 3 Kanäle hatte, aber mein Bild hatte 4 Kanäle, da ich es so erstellt hatte. Ich weise das Array stattdessen wie folgt vor:

%Vor%

Danke für die Hilfe

    
I82Much 02.07.2010, 21:02
quelle

2 Antworten

15

(Angenommen, Sie möchten, dass Sie Überladungen auflösen, wenn Sie eine Null übergeben müssen):

Genauso wie Sie es in Java tun würden, indem Sie den Typ für die Überladung angeben, die Sie aufrufen möchten (in Java würden Sie es tun, aber es ist dasselbe: eine Behauptung des statischen Typs, der dem% co_de zugewiesen werden soll) %):

%Vor%     
Randall Schulz 02.07.2010, 21:16
quelle
5

Sie haben Nil mit null verwechselt.

    
Dimitris Andreou 02.07.2010 21:06
quelle

Tags und Links