我有一个属性,我想在每个输入值上强制触发。在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(@_);
}然而,在驼鹿v2中进行同样的更改并不起作用。我将这个特性用于我想要用正则表达式清理的字段。然而,检查它们是否一致意义不大,因为(几乎)它们都不会是一致的。我使用这个方法来做一些简单的事情,比如在字符串上运行正则表达式,或者重新格式化字符串(这可以将现实世界中的货币表示法表示为db可以使用的值)。
发布于 2011-12-19 17:21:12
我能想到的让强制在每个输入上触发的唯一原因是,如果你使用强制来产生副作用,在这种情况下,我建议你参考历史悠久的医生笑话:
患者:医生,我这样做的时候很痛。
医生:那就别那么做了。
我意识到你可能有很多代码要修复,但我不怀疑你最终会得到更干净的代码。
https://stackoverflow.com/questions/8507927
复制相似问题