gpt4 book ai didi

perl - 当推送到我的 perl Moo 类中的 ArrayOf[] 成员时,如何检查对象是否有效?

转载 作者:行者123 更新时间:2023-12-01 21:55:48 27 4
gpt4 key购买 nike

我创建了一个包含对象数组的 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_但我不太清楚如何在我的代码中使用它。

最佳答案

旧问题的答案,因为我已经有一段时间无法登录 StackExchange...

package MyClass;
use Moo;
use Types::Standard qw( ArrayRef InstanceOf );
use Sub::HandlesVia;

has connected => (
is => 'ro',
isa => ArrayRef[InstanceOf['MyClass']],
default => sub { [] },
handles_via => 'Array',
handles => {
'connect' => 'push',
}
);

Sub::HandlesVia 将自动为您进行类型检查。

关于perl - 当推送到我的 perl Moo 类中的 ArrayOf[] 成员时,如何检查对象是否有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57384116/

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