作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
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/
我是一名优秀的程序员,十分优秀!