ダック・タイピングのメモ
Javaのようにjava.lang.Objectがすべての親になっており、必ず階層を必要とする考えで型を決定する場合は、その階層構造から型を決定することが出来るという話らしい。どの階層構造に属しているか否かで型の判別ができます、と。
これに対し動的言語(RubyやPython等)は、階層構造は気にせず要求さえ満たせれば良いと。アヒルのように歩き鳴くならそれもうアヒルだよね、っていう考えだって。在庫があり品番があればそれは商品だみたいな感じだ。中古品かもしれんし不良品かもしれないけど、みたいな。
信じるに値する要求を満たせるんだから、それでいいじゃんって感じかな。
上記Wikipediaにのってるサンプルコード
def test(foo) puts foo.sound end class Duck def sound 'quack' end end class Cat def sound 'myaa' end end test(Duck.new) test(Cat.new)
うーむ。なるほど。階層で決定できないなら、使ってみるしかないわけだ。