이 가지고있는 무스 속성 유형으로 변환 :올바른 방법으로 정의하고
package MyPath;
use strict;
use warnings;
use Moose;
has 'path' => (
is => 'ro',
isa => 'Path::Class::Dir',
required => 1,
);
1;
을하지만 같은 두 가지 방법으로이 객체를 생성합니다 :
use strict;
use warnings;
use MyPath;
use Path::Class;
my $o1 = MyPath->new(path => dir('/string/path')); #as Path::Class::Dir
my $o2 = MyPath->new(path => '/string/path'); #as string (dies - on attr type)
그리고 때 'str을'로 전화 - 희망을 두 클래스 :: 경로 :: 디렉터리에 MYPATH 패키지에 내부적으로 변환, 그래서 : $o1->path
및 $o2->path
가 반환해야 축복 나는 defin을 확장하려고 Path::Class::Dir
다음에 ition : 그것은 작품을 수행하고 여전히 "다소"는 package MyPath
에 자동으로 내부적으로 Str
Path::Class::Dir
에 변환이 필요
has 'path' => (
is => 'ro',
isa => 'Path::Class::Dir|Str', #allowing both attr types
required => 1,
);
...
누군가가 나에게 몇 가지 힌트를 줄 수 있을까?
편집 :
좀 더 힌트를주세요 ... 아직
coerce Directory,
from Str, via { Path::Class::Dir->new($_) };
has 'path' => (
is => 'ro',
isa => 'Directory',
required => 1,
);
그러나이 올바르게 사용하는 방법을 생각를 havent : Oesor의 힌트를 바탕으로 난 내가가 someting 등이 필요 이상으로 발견?
감사합니다. – novacik
당신의'subtype 'Path :: Class :: Dir'...'선언은'class_type 'Path :: Class :: Dir';'으로 더 자연스럽게 작성 될 수 있습니다. – hobbs