gpt4 book ai didi

perl - 键入属性的 Moose 空值

转载 作者:行者123 更新时间:2023-12-02 08:39:57 27 4
gpt4 key购买 nike

在 Moose 中是否有某种方法可以指定我希望属性具有特定类型,但也允许存在空值(undef?)。

例如,我正在编写一个链表的简单实现,并且有一个 Node 类,其中 nextprev 指针必须是 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

我希望能够为 nextprev 指针指定一个空值(如 undef),但是当我创建一个空的 Node 在我的 List 类中:

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 类型。

有办法解决这个问题吗?

最佳答案

您可以使用 Maybe[type] 语法来允许类型或 undef。对于您的示例:

   has 'head' => (
is => 'rw',
isa => 'Maybe[Node]',
# empty head node
default => sub {
Node->new( value => undef, next => undef, prev => undef );
}
);

关于perl - 键入属性的 Moose 空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17533614/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com