Moose > Moose::Cookbook::Snack::Types

題名

Moose::Cookbook::Snack::Types - 型や型制約を利用するときのサンプルコード

概要

  package Point;
  use Moose;

  has 'x' => ( isa => 'Int', is => 'ro' );
  has 'y' => ( isa => 'Int', is => 'rw' );

  package main;

  my $point = eval { Point->new( x => 'fifty', y => 'forty' ); };

  if ($@) {
      print "Oops: $@";
  }

  my $point;
  my $xval             = 'forty-two';
  my $xattribute       = Point->meta->find_attribute_by_name('x');
  my $xtype_constraint = $xattribute->type_constraint;

  if ( $xtype_constraint->check($xval) ) {
      $point = Point->new( x => $xval, y => 0 );
  }
  else {
      print "Value: $xval is not an " . $xtype_constraint->name . "\n";
  }

本文

これはMoose::Cookbook::Basics::Recipe1で利用したPointの例に型チェックを追加したものです。

Intなアトリビュートに文字列の値を割り当てようとすると、Mooseは明示的にエラーメッセージを出して死にます。エラーメッセージにはアトリビュート名と型制約名、制約チェックに失敗した値が含まれています。

ここではevalを使ってエラーメッセージを$@に取り込んでいます。

後半では、Moose::Meta::AttributeからMoose::Meta::TypeConstraintオブジェクトを取得して、Moose::Meta::TypeConstraintを利用して直接値のチェックを行っています。

参照

Moose::Cookbook::Basics::Recipe1
Moose::Utils::TypeConstraints
Moose::Meta::Attribute

作者

Jess Robinson <cpan@desert-island.me.uk>

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

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.