2011-08-10 3 views
1

私は設定を読み込むクラスを持っています。問題は、このクラスのエラーをどのように報告するのか分かりません。ムースコンストラクタからエラーを報告するには?

dieを使用すると、構成がパラメトリックでエラーが一般的であるため、十分ではありません。

私はMooseBUILDメソッドでread関数を呼び出すという事実によって状況が複雑になります。この使用法は、クラスが使用されているときの可読性を大幅に向上させるため、このようにしておきたいと思います。

+0

これに便利な答えを得るには、 "エラー"を定義する必要があると思います。建設中のエラーは工事を妨げるので、 'die'が適切です。この質問で「エラー」とは何を意味しますか? – darch

答えて

1

dieの何が問題になっていますか?必要に応じてキャプチャして処理できる例外がスローされます。実際にはMoose自体が検証エラーで例外をスローします。

+0

私は 'die'を使って' eval'でそれを捕らえるべきですか? –

+1

@Let_Me_Be - あなたは 'eval'でキャッチすることができますが、あなたを噛むかもしれないいくつかのコーナーケースがあります。私はそれらを避けるために[Try :: Tiny](http://search.cpan.org/perldoc?Try::Tiny)を使っています。詳細については、docs(BACKGROUND)を参照してください。 – bvr

1

croak()機能については、Carpを参照してください。そのドキュメントから:)

彼らはダイ( のように振る舞うので、鯉のルーチンが独自のモジュールに便利です)または(警告、しかし、あなたのモジュールのユーザーに に有用である可能性が高いとメッセージ。 cluck、confess、longmessの場合は、コンテキストはcall-stackのすべての呼び出しの要約です。 短いメッセージの場合、carpまたはcroakを使用して、モジュールがどこから呼び出されたかをエラー として報告することができます。

Try::Tinyと一緒に使用すると、古い古いダイとevalを一致させるよりも、強力で柔軟性があり、説明的な解決策が得られます。たとえば、$ @が悪い情報を提供するようなエッジケースについては心配する必要はありません。そしてあなたの例外は、より正確に説明できるだけでなく、より詳細になります。 Carpでは、クロークが告白のように動作するようにすることもでき、詳細なスタックトレースを提供することで、問題の発生元を正確に把握しやすくなります。

関連する問題