Perl 驼鹿:你如何对每一个输入进行强制射击?
我有一个属性,我想对每个输入值进行强制。在0.72之前,这是通过从Perl 驼鹿:你如何对每一个输入进行强制射击?,perl,moose,Perl,Moose,我有一个属性,我想对每个输入值进行强制。在0.72之前,这是通过从Str强制执行Str来实现的。当这个特性被删除时,我求助于硬破解Meta::TypeConstraint文件来保持生产代码的工作。自从发布Moose2.0以来 我过去只是在注释出return$\u0]if$self->check($\u0])时做了这个更改 然而,在MooseV2中做出同样的改变是行不通的。我将此功能用于我知道要用正则表达式清理的字段。然而,检查它们是否符合要求没有什么意义,因为(几乎)它们都不符合要求。我使用这种
Str
强制执行Str
来实现的。当这个特性被删除时,我求助于硬破解Meta::TypeConstraint
文件来保持生产代码的工作。自从发布Moose2.0以来
我过去只是在注释出return$\u0]if$self->check($\u0])时做了这个更改代码>
然而,在MooseV2中做出同样的改变是行不通的。我将此功能用于我知道要用正则表达式清理的字段。然而,检查它们是否符合要求没有什么意义,因为(几乎)它们都不符合要求。我使用这种方法来处理一些简单的事情,比如在字符串上运行正则表达式,或者重新格式化字符串(在现实世界中,它可以表示db可以使用的货币符号)。我能想到的希望强制在每个输入上触发的唯一原因是,如果您使用强制来产生副作用,在这种情况下,我想请大家看一个由来已久的医生笑话:
病人:医生,我这样做很痛。
医生:那就别那么做
我意识到你可能有很多代码需要修复,但我毫不怀疑你最终会得到更干净的代码。我能想到的希望对每个输入都进行强制的唯一原因是,如果你使用强制的副作用,在这种情况下,我建议你参考一个由来已久的医生笑话:
病人:医生,我这样做很痛。
医生:那就别那么做
我意识到您可能有很多代码需要修复,但我毫不怀疑您最终会得到更干净的代码。您不能自己创建访问器吗<代码>具有foo=>(访问器=>'_-foo',句柄=>{foo=>sub{…},},)代码>你不能自己做一个访问者吗<代码>具有foo=>(访问器=>'_-foo',句柄=>{foo=>sub{…},},)代码>你为什么认为s/foo/bar/代码>比s/foo/bar/if/foo/更干净代码>。这是相当愚蠢的,而且不必要的慢。另外,如果你想在每个属性分配上运行一个副作用,你不就使用一个触发器(或者一个初始值设定项,如果你想改变属性值)吗?除了一个触发器位于一个属性上,我想在类型上运行它。你为什么认为s/foo/bar/代码>比s/foo/bar/if/foo/更干净代码>。这是相当愚蠢的,而且速度不必要的慢。另外,如果你想在每个属性分配上运行一个副作用,你会不会只使用一个触发器(或者一个初始值设定项,如果你想改变属性值)?除了一个触发器位于一个属性上,我想在类型上运行它。
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(@_);
}