我有以下代码重复多次,因为我有几个遵循相同模式的类
use MooseX::Types -declare [ qw( Item ) ];jj
my $itc = $prefix . 'Item';
class_type Item, { class => $itc };
coerce Item, from HashRef, via { load_class( $itc )->new( $_ ) };
我有一种简单的方法可以对创建class_type
和强制的代码进行重复数据删除吗?这不是理解MooseX :: Types的问题,而是大量重复代码的问题。这是a link to that code in its current state。它变得有点混乱,并不是我为之骄傲的东西。
答案 0 :(得分:0)
首先,您的示例代码在语法上不正确。
其次我认为你的问题(如果我理解正确的话)在MooseX::Types文档中直接回答。只需按照那里给出的例子:
package MyTypes;
my @types = qw/Item1 Item2/;
use MooseX::Types -declare => [ @types];
use MooseX::Types::Moose qw/Int HashRef/;
use Moose::Util::TypeConstraints;
use URI;
foreach my $type (@types) {
class_type $type, { class => 'URI' };
coerce $type, from 'Str', via { URI->new( $_ ) };
}
1;
package Foo;
use Moose;
has test => (is => 'rw', isa => 'Item1', coerce => 1);
1;
package main;
use v5.10;
use strict;
use warnings;
my $t = Foo->new(test => 'http://test.com');
say $t->test;