取势 明道 优术

作者为 扶 凯 发表

Moose 非常的 OO.很是好用,默认有很多的类型,可以对参数的检查,有时我们想自己定定制输出的出错信息,在这个中也非常方便.写个小例子给大家看看:

如下,其中我们检查 data 必须是数字,大于 0 和小于 10 ,有定制的出错信息.
另外,还有一个文件名做属性的.如果文件不存在,也会报错.
最后一个是多个参数只,只能是选择的参数传进来.

package TClass;
use Moose;
use Moose::Util::TypeConstraints qw( subtype where message enum);  


has data => ( 
        is => 'rw', 
        isa => subtype( 
                        where { $_ >= 0 && $_ < 10 } 
                            => message { "< $_ 必须是大于 0 和小于 10>" } 
                       ),  
        );  
has fileName => ( 
        is => 'rw', 
        isa => subtype( 
                        'Str', where { -f } 
                            => message { "<$_ 文件不存在>" } 
                        ),  
        );  

has color => (
        is => 'rw', 
        isa => subtype ( 
                enum( [ qw( red yellow blue ) ], ) 
                    =>  message { "<$_ 必须是 red yellow blue 其中之一>"}  
            ),  
        );  

no Moose::Util::TypeConstraints;

package main;
my $oo = TClass->new;
$oo->data( -1 );
$oo->fileName( 'text.txt' );
$oo->color('re1d');


出错信息会象下面一样.信息很少,一个是出错的调用的行,另一个是出错的属性地址.

Attribute (data) does not pass the type constraint because: < -1 必须是大于 0 和小于 10> at accessor TClass::data (defined at 9.pl line 11) line 4
	TClass::data('TClass=HASH(0x83f5738)', -1) called at 9.pl line 32
	eval {...} called at 9.pl line 32
Attribute (color) does not pass the type constraint because: <re1d 必须是 red yellow blue 其中之一> at accessor TClass::color (defined at 9.pl line 26) line 4
	TClass::color('TClass=HASH(0x83f5738)', 're1d') called at 9.pl line 34
	eval {...} called at 9.pl line 34


来了就留个评论吧! 没有评论