我创建了一个 Moo 类,其中包含一个对象数组,该数组使用Types::Standard对照一个类型进行检查,并且我想验证我是否将正确的对象放入该数组中,而无需进行过多的硬编码。这是我现在拥有的示例:
package MyClass;
use Moo;
use Types::Standard qw( ArrayRef InstanceOf );
# Initially empty array of objects
has connected => (
is => 'ro',
isa => ArrayRef[InstanceOf['MyClass']],
default => sub { [] }
);
# Add an object to our internal list
sub connect {
my ( $self, $other ) = @_;
# TODO: Check if "$other" is actually an InstanceOf['MyClass']
# without doing "$self->connected( $self->connected )"
push @{$self->connected}, $other;
}
在connect()中,我将对象添加到我的内部数组中,但如果我理解正确,则永远不会检查该对象,InstanceOf['MyClass']
因为我实际上并没有再次设置数组引用。
对每个新对象执行此验证的好方法是什么?在推送了一个新项目后,我曾短暂地考虑过这样做$self->connected( $self->connected )
,但这必须验证每个对象。
理想情况下,我什至不想确切地知道 ArrayRef 中的内容,只是需要检查它。我查看了Type::Tiny文档中的 _type_parameter_ ,但我不太清楚如何在我的代码中使用它。