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 に答える