No Scala, como você define um parâmetro local no construtor principal de uma classe?
No Scala, como definir um parâmetro local no construtor principal de uma classe que não é um membro de dados e que, por exemplo, serve apenas para inicializar um membro de dados na classe base?
Por exemplo, no código a seguir, como eu poderia definir o parâmetro corretamenteb
no construtor primário de classeB
de modo que ele gera apenas um parâmetro local temporário e não um membro de dados?
class A(var a: Int)
class B(?b?) extends A(b)
Randall, suas respostas explicam porque o compilador Scala reclama quando eu introduzo um métodoinc
que incrementa a propriedadea
, mas também altera o nome do parâmetro na classeB
construtor para corresponder ao parâmetro na classeA
construtor:
class A(var a: Int)
class B(a: Int) extends A(a) {
def inc(value: Int) { this.a += value }
}
Saída do compilador Scala:
$ scala construct.scala
construct.scala:3: error: reassignment to val
def inc(value: Int) { this.a += value }
^
one error found
Scala reclama porque classeB
deve agora ter uma propriedade privada, somente leituraa
devido à referência aa
eminc
. MudandoB(a: Int)
paraB(var a: Int)
gera um erro de compilador diferente:
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
Adicionandooverride
não ajuda:
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
Como posso usar o mesmo nome no parâmetro no construtor principal deB
como a propriedade definida no construtor principal da classe baseA
?