Scala の Trait
scala> class M { def m() { println("hello"); } } defined class M scala> (new M).m() hello scala> trait N { def m() { println("hi"); } } defined trait N scala> (new M with N).m() <console>:10: error: anonymous class $anon inherits conflicting members: method m in class M of type ()Unit and method m in trait N of type ()Unit (Note: this can be resolved by declaring an override in anonymous class $anon.) (new M with N).m()
メソッド名が衝突する。 override を指定してやると動く。
scala> (new M with N { override def m = super[N].m }).m() hi
ちょっとめんどくさい。Ruby の mix-in と trait は別物らしい。けどどこらへんが別物なのかまだいまいちわかってない。
Perl 6 の Role は個人的な感想としては mixin じゃないのというイメージなんだけど、あれも Trait のうちに入るんだろうか。