【发布时间】:2013-12-31 15:31:01
【问题描述】:
所以,我喜欢宏(对我大喊大叫)。
我试图在 Haxe 中创建一个宏,它允许我编写传统的(C++、Java)for 循环并具有相同的功能。但我是 Haxe 的初学者......
代码:
import haxe.macro.Expr;
class Cfor {
macro public static function cfor(init: Expr, cond: Expr, post: Expr, body: Expr) {
return macro {
$init;
while ($cond) {
$body;
$post;
}
}
}
public static function main() {
trace("Traced");
cfor(var i = 0, i < 100, i++, {
var x = i * 2;
trace(x);
});
}
}
问题:
- 它已经可以工作了(那个特定的测试),但它与传统的 for 循环并没有那么接近。 如何改进?
- 您对此代码有任何其他改进(样式/功能)吗?
- 关于此代码,我应该了解什么特定的目标吗?
- 如何查看对 cfor 的调用扩展为什么?
【问题讨论】:
-
您可以在其他类中执行
import CFor.cfor,然后只需运行cfor(cond),而无需调用CFor.cfor(),这有点帮助。 @Franco 在下面显示的答案是一种让它看起来更像经典 C 外观的方法 -
要查看生成的代码,请使用
haxe -D dump=pretty mybuild.hxml。它将创建一个“dump/”文件夹,其中包含“CFor.dump”,显示生成的代码。 -
那个倾倒很整洁,谢谢。我之前做的就是编译成Java,看输出,但显然这不是一个好的选择。
-
直到昨天我做了同样的事情,我才在看到你的问题前几个小时才发现“-D dump=pretty”选项:)