Context.parse() 错误的 haxe 宏捕获
haxe macro catching of Context.parse() errors
在编译(宏)时,调用
Context.parse("a bad expression", somePos)
产生一个错误,即 不能 在 try-catch 块中被捕获(编辑: 这是错误的,见下文)。有没有办法捕获这个错误? Context.parseInlineString() 似乎也不起作用。
其他函数如Context.typeExpr()也有类似的问题。
编辑:
catch 的type 错误。我做了:
try {...}
catch (err:String) {...}
你必须做的事情:
try {...}
catch (err:Dynamic) {...}
仔细阅读文档可以解释这一点。这与 Java 不同,后者每个错误对应一种类型的异常。在 Haxe 中,大多数 错误是字符串,但也有一些像这里的错误。
以下对我有用:
import haxe.macro.*;
class Test {
macro static function test() {
try {
Context.parse("a bad expression", Context.currentPos());
} catch(e:Dynamic) {
trace(e); //Test.hx:8: Missing ;
}
return macro {};
}
static function main() {
test();
}
}
在编译(宏)时,调用
Context.parse("a bad expression", somePos)
产生一个错误,即 不能 在 try-catch 块中被捕获(编辑: 这是错误的,见下文)。有没有办法捕获这个错误? Context.parseInlineString() 似乎也不起作用。
其他函数如Context.typeExpr()也有类似的问题。
编辑: catch 的type 错误。我做了:
try {...}
catch (err:String) {...}
你必须做的事情:
try {...}
catch (err:Dynamic) {...}
仔细阅读文档可以解释这一点。这与 Java 不同,后者每个错误对应一种类型的异常。在 Haxe 中,大多数 错误是字符串,但也有一些像这里的错误。
以下对我有用:
import haxe.macro.*;
class Test {
macro static function test() {
try {
Context.parse("a bad expression", Context.currentPos());
} catch(e:Dynamic) {
trace(e); //Test.hx:8: Missing ;
}
return macro {};
}
static function main() {
test();
}
}