作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我创建了一个包含对象数组的 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/
我是一名优秀的程序员,十分优秀!