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 に答える