Wie definieren Sie in Scala einen lokalen Parameter im primären Konstruktor einer Klasse?
Wie definiert man in Scala einen lokalen Parameter im primären Konstruktor einer Klasse, die kein Datenelement ist und die beispielsweise nur dazu dient, ein Datenelement in der Basisklasse zu initialisieren?
Wie kann ich beispielsweise im folgenden Code Parameter richtig definieren?b
im primären Konstruktor der KlasseB
damit es nur einen temporären lokalen Parameter und kein Datenelement erzeugt?
class A(var a: Int)
class B(?b?) extends A(b)
Randall, deine Antworten erklären, warum sich der Scala-Compiler beschwert, wenn ich eine Methode einführeinc
das erhöht die Eigenschafta
Ändern Sie jedoch auch den Namen des Parameters in der KlasseB
Konstruktor, der mit dem Parameter in der Klasse übereinstimmtA
Konstrukteur:
class A(var a: Int)
class B(a: Int) extends A(a) {
def inc(value: Int) { this.a += value }
}
Ausgabe des Scala-Compilers:
$ scala construct.scala
construct.scala:3: error: reassignment to val
def inc(value: Int) { this.a += value }
^
one error found
Scala beschwert sich da klasseB
muss jetzt eine private schreibgeschützte Eigenschaft habena
aufgrund des Verweises aufa
iminc
. ÄndernB(a: Int)
zuB(var a: Int)
generiert 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ügenoverride
hilft auch nicht:
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 den gleichen Namen im Parameter im primären Konstruktor von verwenden?B
als die im primären Konstruktor der Basisklasse definierte EigenschaftA
?