我试图在Haxe 3中编写一个简单的互递归函数,但是无法使代码编译,因为其中出现的一组相互调用的函数将报告该组中的其他函数未定义。下面是一个最小的示例,其中使用相互定义的函数 odd
和 even
来确定奇偶性。
static public function test(n:Int):Bool {
var a:Int;
if (n >= 0) a = n; else a = -n;
function even(x:Int):Bool {
if (x == 0)
return true;
else
return odd(x - 1);
}
function odd(x:Int):Bool {
if (x == 0)
return false;
else
return even(x - 1);
}
return even(a);
}
尝试编译为neko时出现以下问题:
../test.hx:715: characters 11-14 : Unknown identifier : odd
Uncaught exception - load.c(181) : Module not found : main.n
我尝试在Haxe3中像在c/c++中那样先声明
even
之前的odd
, 但是似乎这是不合法的。如何定义像上面那样相互递归的函数?这是否可能?请注意:我想让odd
和even
都成为局部函数,包裹在全局可见的test
函数中。谢谢。
odd
没有被初始化。../test.hx:725: characters 19-22 : Local variable odd used without being initialized
Uncaught exception - load.c(181) : Module not found : main.n
- thorvar even=null
,var odd=null
。Haxe 太过严谨了,这反而不好。我会修改我的回答。 - Jason O'Neil