Haxeはほとんど何も投げることを許可しますが、キャッチする能力には少し制限があるようです。私はほとんど何をキャッチすることができますがスローされたEnum値のキャッチ
class Error
{
public static var CATCH_ALL:Bool = false;
public static function Throw(aError:ErrorType, ?ignore:Bool=false, ?inf:PosInfos):Void
{
trace('Error: $aError at ' + inf.className + ':' + inf.methodName + ':' + inf.lineNumber);
if (!CATCH_ALL && !ignore)
{
throw aError;
}
}
}
enum ErrorType
{
NULL_PARAM(msg:String);
NOT_FOUND(msg:String);
}
、私は基本的な型、クラス型と列挙型に限られています:例えば、私はERRORTYPE列挙型の値をスローする静的誤差関数を持っています。つまり、すべての文字列を取得できますが、具体的には「potato」を含む文字列は取得できません。複数のエラークラスを作成すると、他のクラスを無視して特定のクラスタイプをキャッチできますが、同じことはenumでは可能ではないようです。コンパイルする次のコードに代わるものがありますか?
try
{
Error.Throw(ErrorType.NULL_PARAM('Potato'));
}
catch (e:ErrorType.NULL_PARAM) trace(e); //does not work nor compile
catch (e:ErrorType) trace(e); //works, but catches every error
答えをありがとう。だから、もし私がエラーを起こしたらスタックトレースを失う。代わりにPosInfoをエラーオブジェクトに含めて、少なくともスタックなしでも位置データを保持することができます。または単にエラーオブジェクトを持つ私の古い方法に戻って、あらゆる種類のエラーに対して拡張されたクラスに戻ってください。私はどこかで、パラメータを持つenum値がコード生成のクラスと似ていることを読んでいたので、一意の型として機能することを期待しました。 –
一部のプラットフォームでコールスタックを保持できることに注意してください。 Nekoにはその問題で言及されている['neko.Lib.rethrow'](http://api.haxe.org/neko/Lib.html#rethrow)があります。 – Gama11