YAPC::Asia 2009 特別研修に参加しました

YAPC::Asia 2009の特別研修「Moose入門」に参加してきました。少人数で、9時〜17時までみっちり勉強できました。

復習用資料

資料はgitで落とせます。exerciseがとても充実していて、exerciseができれば一通り講義の内容がわかるようになっています。Mooseの使い方を一通り知りたいかたはぜひやってみるといいと思います。

git clone git://git.moose.perl.org/moose-presentations.git
cd moose-presentations
git -b checkout origin/japanese

講義はMooseのマニュアルに沿ったものでした。Moose日本語マニュアルがすごくいいので、英語の400ページの資料にげんなりしちゃうときはこっちを読むとしあわせです!
http://perldoc.perlassociation.org/pod/Moose-Doc-JA/index.html

わからなかったこと

アトリビュートにdoesつけたときがよくわからなかったです。

  1 package Fly;
  2 use Moose::Role;
  3 sub fly {
  4     my $self = shift;
  5     print 'fly';
  6 }
  7 no Moose::Role;
  8 1;
  9
 10 package Wing;
 11 use Moose;
 12 with 'Fly';
 13 no Moose;
 14 1;
 15
 16 package Bird;
 17 use Moose;
 18 has 'wing' => (
 19     is => 'rw',
 20     does => 'Fly',
 21 );
 22 no Moose;
 23 1;
 24
 25 package main;
 26 my $eagle = Bird->new(wing => Wing->new);
 27 $eagle->wing->fly;

wingというアトリビュートにdoes 'Fly'したときって、wingには「Flyができるオブジェクト」をいれなきゃだめなんですね。(10〜14行目の部分)
こうして全体をみると当たり前のことかもしれないんですけど、アトリビュートの部分だけしか見えてなかったのでちょっとつまづきました。
でもオブジェクト入れないとってことは、isa 'Wing'でもいいんじゃ!??doesで制限するときのシチュエーションがわからない!

同じメソッドを持っているいくつかのオブジェクトのうちどれでもいいっていうときに使うのでしょうか><