Scala:在扩展classe中重用参数名称

时间:2017-07-18 13:41:53

标签: scala

在此代码中,a中的参数BA.a

不同
class A(var a:String)

class B(a:String) extends A(a) {
    println(a) // Use B.a

  def p() {
   println(a)
 }
}

val b=new B("abc")
b.p() // "abc"
b.a="def"
b.p() // "abc" and not "def"

我可以像这样重命名B中的参数:

class B(_a:String) extends A(_a) {
    println(_a) // Use B.a

  def p() {
   println(a)
 }
}

但我希望为Scaladoc保留名称' a'以及与语法B(a="def")的兼容性。 我如何解决这种情况?

1 个答案:

答案 0 :(得分:1)

您可以将主构造函数设为私有,并添加一个以a作为名称的辅助构造函数:

class B private (_a:String, ignore: Unit) extends A(_a) {
    def this(a) { this(a, ()) }

    println(_a) // Use B.a

    def p() {
      println(a)
    }
}

但这似乎很容易导致混乱。所以我会寻找替代设计,正如对问题的评论所暗示的那样。