2011-12-14 11 views
2

私は属性を持っているので、すべての入力値に対して強制的に発砲したいと思います。 0.72より前は、StrStrから強制して行われました。この機能が削除されたとき、私はMeta::TypeConstraintファイルをハードハッキングして、実動コードを動作させ続けました。 Moose 2.0ムースすべての入力に対してどのように強制的な発砲をしますか?

のリリース以来、私は単純に、この変更は、ムースV2で同じ変更が機能しないことをすること、しかし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(@_); 
} 

をコメントアウトするために使用しました。私はregexesでクリーンアップしたいと知っているフィールドのためにこの機能を使用しています。しかし、それが準拠するかどうかを確認するのはほとんど(ほとんど)合致しないため、ほとんど意味をなさない。このメソッドは、文字列の正規表現を実行するか、文字列を再フォーマットするなどの簡単な処理に使用します(これは実世界のお金表記をdbが使用できるものにすることができます)。あなたは、私は時間光栄医師のジョークにあなたを参照してください。その場合には、その副作用のために型変換を使用している場合、私はすべての入力に起動するように型変換を望むためと考えることができ

+1

あなたは自分のアクセサリーを作ることはできませんか? ' – ikegami

答えて

0

唯一の理由は次のとおりです。

患者:医者、私がこれをすると痛いです。
Doctor:そうですね。

私はおそらく修正するコードがたくさんあることを理解していますが、最後にきれいなコードで終わるのは間違いありません。

+0

なぜ' s/foo/bar /; 'は' 'よりも洗練されたものだと思いますか?' ' s/foo/bar/if/foo /; 'となります。これはむしろ愚かであり、不必要に遅くなります。 –

+0

さらに、属性の割り当てごとに副作用を実行する場合は、トリガー(または属性値を変更する場合はイニシャライザ)を使用しないでください。 – Ether

+0

トリガが属性に置かれているのを除いて、その型でトリガを実行したかったのです。 –

関連する問題