題名¶
Moose::Cookbook::Snack::Keywords - Mooseの禁句
本文¶
MooseはPerlの組み込み関数をエミュレートするために多数のシュガー関数をエクスポートしますが、これらのシュガー関数は、ほかのユーザ定義の関数と衝突することがあります。このドキュメントでは簡単に参照できるよう、そういったキーワードの一覧を提供します。
「meta」キーワード¶
たいていの衝突は避けられますが、use Moose
したらmeta
がインポートされてしまうのは避けられません。このmeta
をオーバーライドしたり、挙動を変えると、Mooseの内部を壊すことになりかねません。
Mooseのキーワード¶
MooseやMoose::Roleを使うときに避けるべきキーワードは次の通りです。
- extends
- with
- has
- before
- after
- around
- super
- override
- inner
- augment
- confess
- blessed
Moose::Util::TypeConstraintsのキーワード¶
Moose::Util::TypeConstraintsを使うときに避けるべきキーワードは次の通りです。
- type
- subtype
- class_type
- role_type
- maybe_type
- as
- where
- message
- optimize_as
- coerce
- from
- via
- enum
- find_type_constraint
- register_type_constraint
衝突を避けるには¶
Mooseを無効にする¶
Mooseがエクスポートするシュガー関数は、コードの末尾にno Moose
を加えるだけで取り除くことができます。
package Thing;
use Moose;
# code here
no Moose;
こうすると、Mooseが最初にエクスポートしていたシュガー関数がエクスポートされなくなります。Moose::RoleやMoose::Util::TypeConstraintsも同じやり方でシュガー関数を取り除けます。
Sub::Exporterの機能を使う¶
Moose、Moose::Role、Moose::Util::TypeConstraintsはいずれもSub::Exporterを使ってエクスポートの処理を行っています。つまり、これらのクラスではSub::Exporterが提供しているすべての機能を利用できるということです。
たとえば、Sub::Exporterを使うと、このようにキーワードをリネームすることもできます。
package LOL::Cat;
use Moose 'has' => { -as => 'i_can_haz' };
i_can_haz 'cheeseburger' => (
is => 'rw',
trigger => sub { print "NOM NOM" }
);
LOL::Cat->new->cheeseburger('KTHNXBYE');
詳細はSub::Exporterのドキュメントをご覧ください。
namespace::clean¶
namespace::cleanを使って名前空間をきれいにすることもできます。ただし、この場合はmeta
を取り除いてしまわないよう注意しなければなりません。
package Foo;
use Moose;
use namespace::clean -except => 'meta';
# ...
参照¶
作者¶
John Goulah <jgoulah@cpan.org<gt
>
Stevan Little <stevan@iinteractive.com>
コピーライト & ライセンス¶
Copyright 2006-2009 by Infinity Interactive, Inc.
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.