17

次のような一部のユニットテストコードで、特性の混乱した使用法を見つけました。

trait MyTrait {
  val t1 = ... //some expression
  val t2 = ... //some expression
}

そして、 new を使用してトレイトをインスタンス化し、その間、中括弧で囲まれたいくつかの式がインスタンス化されました。

test("it is a test") {
  new MyTrait {
    // do something with t1 and t2
  }
}

この奇妙な構文に混乱しています。

私の質問は:

  1. 中括弧による特性のインスタンス化に従うのはなぜですか?

  2. この場合の特性のインスタンス化の目的は何ですか?他の場合も役立つ可能性があります?

4

4 に答える 4

4
val t = new MyTrait {
  val t1 = ... //some expression
  val t2 = ... //some expression
}

と同じです

val t = new AnyRef with MyTrait {
  val t1 = ... //some expression
  val t2 = ... //some expression
}

と同じです

val t = new Object with MyTrait {
  val t1 = ... //some expression
  val t2 = ... //some expression
}
于 2013-04-29T14:56:03.290 に答える