0

我有多次重复以下代码,因为我有几个遵循相同模式的类

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 的问题,而是大量重复代码的问题。这是当前状态下该代码的链接。它变得有点混乱,这不是我引以为豪的事情。

4

1 回答 1

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;
于 2012-10-05T12:33:51.210 回答