Wie fügt man eine Aktion in den Konstruktor ein?

7

Naive Frage, glaube ich, aber alles, was ich finde, ruft nur andere Konstruktoren von Konstruktoren auf. Ich muss eine Methode aufrufen. Meine Klasse (Anfang):

%Vor%

Ich möchte also einen Konstruktor mit einem einzelnen Argument haben und in einem solchen Konstruktor eine Methode moveNext aufrufen. Das ist alles.

Wenn ich den Code kompiliere, bekomme ich einen Fehler:

  

error: Abstraktes Mitglied darf keinen privaten Modifikator haben

     

private var had_next: Boolesch;

und dasselbe für value .

Ich habe es geändert zu:

%Vor%

Aber jetzt bekomme ich einen Fehler bei "iter = it":

  

Fehler: 'Dies' erwartet, aber Identifikator gefunden.

     

iter = es;

Wie schreibt man einen solchen Konstruktor in Scala?

    
greenoldman 12.10.2011, 11:46
quelle

2 Antworten

18

Das erste Problem besteht darin, dass Ihre Definitionen von had_next und value abstrakt sind: Diese Elemente haben keine rechte Seite.

Versuchen Sie stattdessen:

%Vor%

Hier bedeutet _ "nicht initialisierter Standardwert". Zum Beispiel funktioniert das Folgende für mich in der Konsole:

%Vor%

Das zweite Problem ("'this' expected ...") kommt daher, dass Hilfskonstruktoren in Scala immer einen anderen Konstruktor als erste Anweisung aufrufen müssen. So könnte Ihr Konstruktor beispielsweise mit this() beginnen. Weitere Informationen finden Sie in Abschnitt 6.7 in Programmierung in Scala .

    
Philippe 12.10.2011, 12:36
quelle
6

Der Standardkonstruktor ist derjenige, den Sie definieren, wenn Sie Ihre Klasse deklarieren

Beispiel:

%Vor%

Sie können den Standardkonstruktor auch so definieren, dass er keine Parameter wie in Ihrem Code akzeptiert

%Vor%

Dann können Sie zusätzliche Konstruktoren hinzufügen. Alle Konstruktoren, die Sie der Klasse hinzufügen, müssen einen anderen Konstruktor als erste Anweisung des Konstruktors aufrufen. Wenn Sie nicht angeben, dass Sie das "Dies erwartet, aber die Kennung gefunden" erhalten haben.

Sehen wir uns ein Beispiel an:

%Vor%

Im obigen Code new classconstructor () tut nichts, weil der leere Konstruktor keinen Rumpf hat. und new classconstructor (200) führt den leeren Konstruktor und den neuen Konstruktor aus, in dem Sie zusätzlichen Code hinzufügen können, z. B. einen Aufruf der moveNext () -Methode. In diesem Fall druckt dieser 200 auf die Konsole.

    
Carlos Quintanilla 12.10.2011 12:11
quelle

Tags und Links