gpt4 book ai didi

haxe - 捕获抛出的枚举值

转载 作者:行者123 更新时间:2023-12-02 01:09:12 25 4
gpt4 key购买 nike

Haxe 几乎可以 throw 任何东西,但它的 catch 能力似乎有点受限。例如,我有一个抛出 ErrorType 枚举值的静态错误函数:

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);
}

虽然我几乎可以捕捉到任何东西,但我仅限于基本类型、类类型和枚举类型。这意味着我可以捕获每个字符串,但不能捕获特定的字符串,例如包含“potato”的字符串。如果我创建多个错误类,我可以在忽略其他类的同时捕获特定的类类型,但枚举似乎无法实现同样的事情。是否可以替代以下可编译的代码?

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

最佳答案

catch 表达式的选择是 limited to types/不像 switch 那样提供模式匹配功能:

Catch blocks are checked from top to bottom with the first one whose type is compatible with the thrown value being picked.

ErrorType 枚举的所有 都与ErrorType 类型 兼容。这意味着不幸的是,我认为你能做的最好的事情就是捕获 ErrorType 然后在 catch block 内进行选择,使用 switch 并可能重新抛出它.但是,请注意,一个简单的 throw e 目前会导致堆栈跟踪丢失,如 #4159 中所述。 .

关于haxe - 捕获抛出的枚举值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45926079/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com