Как мне объявить атрибут, который принимает undef или роль? - PullRequest
2 голосов
/ 23 августа 2011

У меня есть класс Moose с атрибутом, который выполняет определенную роль:

has foo => (is => 'rw', does => 'Foo::Bar');

Теперь, как мне изменить объявление, чтобы разрешить undef?Я попытался does => 'Maybe[Foo::Bar]', но, похоже, это не сработало, не пропуская допустимые значения.

1 Ответ

3 голосов
/ 23 августа 2011

Можно указать такое ограничение с помощью isa.Согласно Moose :: Util :: TypeConstraints имя роли также допустимо.

package Foo::Bar;
use Moose::Role;


package WithFooBar;
use Moose;
with 'Foo::Bar';


package Thing;
use Moose;

has foo => (is => 'ro', isa => 'Maybe[Foo::Bar]');

package main;
use Test::More;

ok(Thing->new(foo => undef));               # pass
ok(Thing->new(foo => WithFooBar->new));     # pass
ok(Thing->new(foo => Thing->new));          # fails

done_testing;
...