小编Pau*_*der的帖子

是否可以使用Moose/MooseX :: Declare for Perl自动强制传递给委托方法的参数(来自Array特征)?

我正在创建一个包含IP地址列表的类,作为Net :: IP对象.

我将Net :: IP对象包装为子类型(IPAddress),并定义了从字符串到IPAddress的强制.然后我使用类型ArrayRef [IPAddress]向名为ip_list的类添加了一个属性,并委托给Array trait 的push方法.

use MooseX::Declare;
use Moose::Util::TypeConstraints;

use Net::IP;

subtype 'IPAddress'
    => as 'Object'
    => where { $_->isa('Net::IP') };

coerce 'IPAddress'
    => from 'Str'
    => via { Net::IP->new( $_ ) };

class IPs {

    has 'ip_list' => ( traits  => ['Array'],
                       isa    => 'ArrayRef[IPAddress]',
                       is     => 'rw',
                       coerce => 1,
                       auto_deref => 1,
                       default => sub { [] },
                       handles => {
                           add_ip    => 'push'
                       }
                       );

}
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试像这样调用委托方法:

my $o …
Run Code Online (Sandbox Code Playgroud)

perl delegation moose traits

5
推荐指数
1
解决办法
504
查看次数

标签 统计

delegation ×1

moose ×1

perl ×1

traits ×1