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?

questionAnswers(4)

yourAnswerToTheQuestion