例外が2つ以上関与する場合は、例外オブジェクトを利用する
文字列ベースの例外には、既存の例外から、新しい例外を簡単に作成する方法がない。
例えば、特定の範囲外の整数を警告する例外と、あまりにも大きすぎる整数を警告する例外があるとする。
これを例外オブジェクトを用いた場合、
#以下のような文を含むクラスがあったとする croak( X::TooBig->new( {num=>$num, list=>$MAX_ALLOWED_VALUE} )) if $num > $MAX_ALLOWED_VALUE;
以下のように派生クラスを作成することで、
package X::WaaayTooBig; use base qw( x::TooBig ); #略 croak(X::WaaayTooBig->new( {num=>$num} ) ) if $num > $MAX_INT;
どちらの例外の場合でも、同じコードで補足できる。
つまり派生した例外を作成しても、例外を処理するコードを変更する必要がない。
if( X::TooBig->caught() ){
}
例外クラスは派生端から順に補足する
if( X::TooBig->caught())とした場合、X::WaaayTooBig例外が送出された場合、真となる。
X::waaayTooBigはX::TooBigを継承しているから。
例外クラスを自動的に構築する
例外クラスは便利で保守性が高いが、コードを書くのが難しい。
Exception::Classモジュールを使用するとよい。
0 件のコメント:
コメントを投稿