【发布时间】:2013-07-09 03:00:57
【问题描述】:
Moose 中是否有某种方法可以指定我希望属性具有特定类型,但也允许存在空值(未定义?)。
例如,我正在编写一个链接列表的简单实现,并有一个 Node 类,其中 next 和 prev 指针必须是 Node 类型(这可能是您所期望的)
package Node;
{
use Moose;
has 'value' => (
is => 'rw',
isa => 'Any', # Nodes can be of any type
);
has 'prev' => (
is => 'rw',
isa => 'Node',
predicate => 'has_prev',
);
has 'next' => (
is => 'rw',
isa => 'Node',
predicate => 'has_next',
);
}
但我希望使用存储在列表头部的哨兵空节点来标记头部,而不是列表的实际元素。所以元素列表 [1, 2, 3] 实际上看起来像:
EMPTY -> 1 -> 2 -> 3
我希望能够为 next 和 prev 指针指定一个空值(如 undef),但是当我在我的 List 类中创建一个空的 Node 时:
package List;
{
use Moose;
has 'head' => (
is => 'rw',
isa => 'Node',
# empty head node
default => sub {
Node->new( value => undef, next => undef, prev => undef );
},
);
Moose 抱怨是因为 undef 不是 Node 类型。
有没有办法解决这个问题?
【问题讨论】: