For loop 在Haxe中使用宏的CFor
所以,我喜欢宏(对我大喊大叫) 我试图在Haxe中创建一个宏,它允许我编写传统的(C++,Java)for循环,并具有相同的功能。但是我在Haxe是个初学者 代码:For loop 在Haxe中使用宏的CFor,for-loop,macros,haxe,For Loop,Macros,Haxe,所以,我喜欢宏(对我大喊大叫) 我试图在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
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);
});
}
}
导入haxe.macro.Expr;
类别Cfor{
宏公共静态函数cfor(init:Expr,cond:Expr,post:Expr,body:Expr){
返回宏{
$init;
while($cond){
$body;
$post;
}
}
}
公共静态函数main(){
跟踪(“跟踪”);
cfor(变量i=0,i<100,i++{
var x=i*2;
微量元素(x);
});
}
}
问题:
- 它已经可以工作了(具体的测试),但是它与传统的for循环没有那么接近如何改进?
- 您对这段代码还有其他改进(风格/功能)吗
- 关于这段代码,有什么我应该知道的特定目标吗
- 我怎样才能看到对cfor的呼叫扩展到了什么
- 这个怎么样
方法是不同的(应用于上下文),但我认为它更接近预期的结果
我看不到您的代码中存在任何潜在的特定于目标的问题。您可以在其他类中执行导入CFor.CFor,然后只运行
CFor(cond)
,而不必调用CFor.CFor()
,这有点帮助@Franco在下面的回答显示了一种使其看起来更像经典C look的方法。要查看生成的代码,请使用haxe-D dump=pretty mybuild.hxml
。它将创建一个带有“CFor.dump”的“dump/”文件夹,其中显示生成的代码。该转储非常整洁,谢谢。我之前做的是编译成Java并查看输出,但显然这不是一个好的选择。直到昨天我做了同样的事情,我在看到您的问题前几个小时才发现“-D dump=pretty”选项:)这也是一件非常有趣的事情,尽管我想远离构建宏。。。据我所知,这段代码循环所有可能比标准宏耗时更长的表达式。