Конспект для MooseX::Types::URI говорит:Moose атрибут принуждения - MooseX :: Типы :: URI
use MooseX::Types::URI qw(Uri FileUri DataUri);
Итак, мой пример кода:
package My;
use 5.014;
use warnings;
use Moose;
use MooseX::Types::URI qw(Uri);
has 'url' => (
is => 'rw',
isa => 'Maybe[Uri]',
coerce => 1,
);
package main;
my $m0 = My->new(); #without url - ok
Ошибка:
You cannot coerce an attribute (url) unless its type (Maybe[Uri]) has a coercion at ./maybe line 9.
С :
my $m1 = My->new(url => 'http://example.com');
другая ошибка:
You cannot coerce an attribute (url) unless its type (Maybe[Uri]) has a coercion at ./maybe line 9. Attribute (url) does not pass the type constraint because: Validation failed for 'Maybe[Uri]' with value http://example.com at
Итак, следующая попытка - не ''
:
has 'url' => (
is => 'rw',
isa => Maybe[Uri],
coerce => 1,
);
Ошибка:
syntax error at ./maybe line 11, near "Maybe[" Execution of ./maybe aborted due to compilation errors.
другой попробовать, добавил use MooseX::Types::Moose qw(Maybe);
:
use MooseX::Types::Moose qw(Maybe);
use MooseX::Types::URI qw(Uri);
has 'url' => (
is => 'rw',
isa => Maybe[Uri],
coerce => 1,
);
...
my $m1 = My->new(url => 'http://example.com');
You cannot coerce an attribute (url) unless its type (Maybe[MooseX::Types::URI::Uri]) has a coercion at ./maybe line 9.
Attribute (url) does not pass the type constraint because: Validation failed for 'Maybe[MooseX::Types::URI::Uri]' with value http://example.com at
ничего не работает. Больше не хочу больше , что не увенчалось успехом.
Я действительно хочу УЗНАТЬ как решить, как использовать уже разработало CPAN определенных типов MooseX, когда использовать ''
, а когда нет, и, как выше будет работает ...
Могли пожалуйста, Кто-то объясняет мне, что я делаю неправильно? То, что я пропустил из любого doccu, особенно из:
- Moose::Manual::Types
- Moose::Util::TypeConstraints (например: "Это всегда хорошая идея, чтобы процитировать ваши имена типа.")
или что иначе я должен читать?
безнадежным Moose начинающий ...; (
Редактировать
Мой вопрос основан на this ответ (и других тоже), где - например:
use MooseX::Types::Moose qw(ArrayRef);
use MooseX::Types::Path::Class qw(Dir);
has 'volumes' => (
is => 'ro',
isa => ArrayRef[Dir],
required => 1,
coerce => 1,
);
bareword " синтаксис "является обязательным. Я только изменил ArrayRef
на Maybe
и Dir
на Uri
.
Итак, главный вопрос остается, как обычный начинающий perl может решить, когда может/должен использовать, используя синтаксис «bareword» и когда «string» -syntax?
Почему ArrayRef[Dir]
действителен (и должен) и Maybe[Uri]
нет? Почему такая несогласованность? Чтобы понять это, я должен изучить источники для Moose *? Как это понимать? Что я должен ПРОЧИТАТЬ?
Re вашего обновления: 'ArrayRef [Dir]', когда у вас есть подзадача под названием 'ArrayRef' и подназвание' Dir', является сокращением для 'ArrayRef ([Dir()]). Вы можете вызывать только подзадачу 'ArrayRef', если у вас есть подзаголовок' ArrayRef'. Вы знаете, что у вас есть подзаголовок, который, когда вы его объявляете, или используете модуль, который его предоставляет. Весь смысл 'MooseX :: Types :: Moose' - создавать функции, которые возвращают свое собственное имя. – ikegami
Что касается того, почему 'use MooseX :: Types :: Moose qw (Maybe);' не предоставляет 'Maybe'? Ну, это для меня. Обновлен мой ответ. – ikegami