Moose で属性に特定の型を持たせたいが、null 値 (undef?) も許可するように指定する方法はありますか?
たとえば、Linked List の単純な実装を作成していて、next
およびprev
ポインターが型である必要がある Node クラスがあります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 など) を指定できるようにしたいと考えていました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 );
},
);
undef
タイプが ではないため、Moose は文句を言いNode
ます。
これを回避する方法はありますか?