先週のKansai.pm #9でやったMooseプレゼンの補足です.このスライド,いろんな人に++されたりしまして,結構うれしかったYO.
で,このスライドに関して,某IRCにてアドバイスをもらったりしました.
11:44 nothingmuch: hakobe: subtype Foo as Object is better written as class_type Foo
11:44 nothingmuch: faster, too
11:45 nothingmuch: e.g. class_type "URI"; class_type "DateTime";
Thank you very much for your advice, nothingmuch.
このアドバイスによると,スライドにあった以下の型の定義は,
subtype 'URI' => as 'Object' => where { $_->isa('URI') };
でも良いのですが,もっと簡単に,
class_type 'URI';
と書けるらしいよ!very smart.
さらに,型のメタオブジェクトにはいろいろな機能があって,上のURI型のメタオブジェクトを取り出すと,
my $meta_class = Entry->meta; my $meta_attribute = $meta_class->find_attribute_by_name('link'); my $meta_type = $meta_attribute->type_constraint; $meta_type->parents # URIのスーパークラスのリスト - なんかうまくいかなかった $meta_type->class # "URI"
といろいろ調べられるらしいです.へえええ.ほかのメソッドはMoose::Meta::TypeConstraint::Classあたりを参照.メタオブジェクトはいじりがいがありそうだなぁ.どういった場面で便利かは,まだよくわかんない.
うーむ,MOPは要勉強だな.