アトリビュートの型制約

Num.pm

 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

 my $num = Num->new(num1 => -10, num => -20);

説明

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

参考

  • 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