如何声明属于undef或角色的属性?

时间:2011-08-23 09:19:45

标签: perl roles moose

我有一个Moose类,其属性具有特定的作用:

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

现在如何更改声明以允许undef?我尝试了does => 'Maybe[Foo::Bar]',但这似乎不起作用,不通过合法的定义值。

1 个答案:

答案 0 :(得分:3)

可以使用isa指定此类约束。根据{{​​3}}角色名称也是有效选项。

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;