* 型制約 - subtype[#ddb4f265]
* 型制約 (subtype)[#ddb4f265]

*** Num.pm [#j22644c7]
 package Num;
 use Mouse;
 use Mouse::Util::TypeConstraints;
 
 has 'num1' => (
    is  => 'ro',
    isa => 'Int',
 );
 
 subtype 'PositiveInt'
    => as 'Int'
    => where { $_ > 0 }
    => message { "The number you provided, $_, was not a positive number" };
  
 has 'num2' => (
    is  => 'ro',
    isa => 'PositiveInt',
 );
 
 __PACKAGE__->meta->make_immutable();

*** main.pl [#iaea632a]
 my $num = Num->new(num1 => -10, num => -20);


** 説明 [#t7acc871]
- hasでアトリビュートを記述する際にisaで型制約を指定する事が出来る。
- 型は組み込みで色々と用意されているが、subtypeで独自の型を定義する事も出来る。
- asで基底の型を、whereで制約を、messadeで型違反時のメッセージを定義する。

** 参考 [#q0c6b081]
- http://search.cpan.org/perldoc?Moose::Util::TypeConstraints
- http://perl-mongers.org/2010/02/the-fastest-way-to-mastering-moose-and-mouse.html
-- 組み込みの型
 Any : 制約なし
 Maybe[TypeName] : UndefかTypeName
 Item : 制約なし
    Bool : 真偽値
    Undef : 未定義(取扱注意)
    Defined : 真値
        Value : プリミティブ値
            Num : 数値('NaN', 'Inf', '0 but true'などはStr型)
                Int : 整数
            Str : 文字列
                RoleName : ロード済みのロール名(Moose 0.84+では非推奨)
                ClassName : ロード済みのクラス名
        Ref : リファレンス
            ScalarRef : スカラーリファレンス
            ArrayRef or ArrayRef[TypeName] : 配列リファレンス
            HashRef or HashRef[TypeName] : ハッシュリファレンス
            CodeRef : コードリファレンス
            RegexpRef : 正規表現リファレンス
            GlobRef : グロブリファレンス
                FileHandle : ファイルハンドル
            Object : オブジェクト
                Role : ロール

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS