scala中具有不可变参数的traits

时间:2013-05-01 15:49:37

标签: scala traits scala-2.10

我想制作以下示例,以便Collar是不可变的

  trait Collar{
    var text:String="";
  }

  class dog(val name:String){
    def bark()=  ...
  }

    val snoopy = new dog("snoopy") with Collar;
    snoopy.text="charley's dog";
    println(snoopy.text)

然而,当我尝试像

这样的东西时
  trait Collar(val text:String){
  }

我收到编译时错误

traits or objects may not have parameters

目前有办法做到这一点吗?如果没有,为什么不呢?

请记住,一只好狗在有衣领时不应该小心。

1 个答案:

答案 0 :(得分:2)

完全不确定你真正的问题是什么,但也许这就是你正在寻找的东西:

trait Collar{
  val tagText: String    // 'val', not 'var'; left undefined here
}

class Dog(val name:String) {
  def bark()=  ...
}

val snoopy = new Dog("snoopy") with Collar {
  val tagText= "charley's dog"
}
println(snoopy.tagText)

或者,可以使用初始值/默认值设置Collar.tagText,也可以在实例化Dog的位置覆盖它。