1

我想制作以下示例,以便 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

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

请记住,一只好狗不应该在乎它有项圈。

4

1 回答 1

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 被实例化的地方也可以被覆盖。

于 2013-05-01T18:55:27.173 回答