小学生のうそが本当になる機能

初めてscalaをみて衝撃をうけたのが、
Traitって機能のwithを使ったMixin。
なんとインスタンスに対してクラス継承するようなことができる。

class Piyo(){
}

trait Hoge(){
}

var piyohoge = new Piyo with Hoge

みたいに。

つまり、
「俺、昨日、魔法使いがライデイン覚えたぜ!!」
ライデインは勇者しか使えないんだからうそに決まってるだろーー!!」
っていうべたべたな小学生のうそがまかり通るようだ。

class 魔法使い{
}

trait 勇者{
  def ライデイン = 〜
}

var xxくんちの魔法使い = new 魔法使い with 勇者

見たいな感じだろうか。
魔法使いがclassで勇者はtraitってあたりが強引で、
厳密にはこのたとえはずれているような気もするけど。

って話を昨日、id:kanoukと飲んでる席ですげーだろっていったら、
それ、Rubyでもできますよってあっさり言われてしまった><
くやしさと同時に、やっぱRubyってすげーな。と関心。