Wie definiert man in Scala einen lokalen Parameter im primären Konstruktor einer Klasse, der kein Datenelement ist und der z.B. nur dazu dient, ein Datenelement in der Basisklasse zu initialisieren?
Wie kann ich zum Beispiel im folgenden Code den Parameter b
im primären Konstruktor der Klasse B
so dass es nur einen temporären lokalen Parameter und kein Datenelement erzeugt?
class A(var a: Int)
class B(?b?) extends A(b)
Randall, Ihre Antworten erklären, warum sich der Scala-Compiler beschwert, wenn ich eine Methode einführe inc
die die Eigenschaft a
, sondern ändern Sie auch den Namen des Parameters in der Klasse B
Konstruktor mit dem des Parameters in der Klasse A
Konstrukteur:
class A(var a: Int)
class B(a: Int) extends A(a) {
def inc(value: Int) { this.a += value }
}
Scala-Compiler-Ausgabe:
$ scala construct.scala
construct.scala:3: error: reassignment to val
def inc(value: Int) { this.a += value }
^
one error found
Scala beschwert sich, weil die Klasse B
muss jetzt eine private, schreibgeschützte Eigenschaft haben a
aufgrund der Bezugnahme auf a
en inc
. Ändern von B(a: Int)
à B(var a: Int)
erzeugt einen anderen Compilerfehler:
construct.scala:2: error: error overriding variable a in class A of type Int;
variable a needs `override' modifier
class B(var a: Int) extends A(a) {
^
one error found
Hinzufügen von override
ist auch nicht hilfreich:
construct.scala:2: error: error overriding variable a in class A of type Int;
variable a cannot override a mutable variable
class B(override var a: Int) extends A(a) {
^
one error found
Wie kann ich denselben Namen im Parameter im primären Konstruktor von B
als die im primären Konstruktor der Basisklasse definierte Eigenschaft A
?