我有一个属性,我想对每个输入值进行强制攻击。在0.72之前,这是通过从Str
强制Str
来完成的。删除此功能后,我使用Meta::TypeConstraint
文件进行硬件攻击以保持生产代码正常工作。自Moose 2.0
我过去只是将此更改评论为return $_[0] if $self->check($_[0]);
sub coerce {
my $self = shift;
my $coercion = $self->coercion;
unless ($coercion) {
require Moose;
Moose->throw_error("Cannot coerce without a type coercion");
}
#return $_[0] if $self->check($_[0]);
return $coercion->coerce(@_);
}
然而,在Moose v2中进行相同的更改不起作用。我正在使用此功能用于我知道要用正则表达式清理的字段。但是,检查它们是否符合是没有意义的,因为(几乎)它们都不符合。我使用这种方法来处理简单的事情,例如在字符串上运行正则表达式,或者重新格式化字符串(它可以代表现实世界中的数字符号表示数据库可以使用的内容)。
答案 0 :(得分:0)
我可以想到的唯一理由是,如果你使用强制手段来解决他们的副作用,那么我想把强制手段放在每一个输入上,在这种情况下,我会把你推荐给历史悠久的医生笑话:
病人:医生,我这样做会很疼。
医生:那么,不要这样做。
我意识到你可能需要修复很多代码,但我不怀疑你最终会得到更清晰的代码。