我有一个Moose类,其属性具有特定的作用:
has foo => (is => 'rw', does => 'Foo::Bar');
现在如何更改声明以允许undef
?我尝试了does => 'Maybe[Foo::Bar]'
,但这似乎不起作用,不通过合法的定义值。
答案 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;