Moose-0.92 > Moose::Cookbook::Snack::Keywords

題名

Moose::Cookbook::Snack::Keywords - Mooseの禁句

本文

MooseはPerlの組み込み関数をエミュレートするために多数のシュガー関数をエクスポートしますが、これらのシュガー関数は、ほかのユーザ定義の関数と衝突することがあります。このドキュメントでは簡単に参照できるよう、そういったキーワードの一覧を提供します。

「meta」キーワード

たいていの衝突は避けられますが、use Mooseしたらmetaがインポートされてしまうのは避けられません。このmetaをオーバーライドしたり、挙動を変えると、Mooseの内部を壊すことになりかねません。

Mooseのキーワード

MooseMoose::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::RoleMoose::Util::TypeConstraintsも同じやり方でシュガー関数を取り除けます。

Sub::Exporterの機能を使う

MooseMoose::RoleMoose::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';
  # ...

参照

Moose
Moose::Role
Moose::Utils::TypeConstraints
Sub::Exporter
namespace::clean

作者

John Goulah <[email protected]<gt>

Stevan Little <[email protected]>

コピーライト & ライセンス

Copyright 2006-2009 by Infinity Interactive, Inc.

http://www.iinteractive.com

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.