2014-01-24 62 views
2

请注意,我在Linux上使用针对Neko的Haxe 3.0.1。如何在不导入类型的情况下解析类别?

考虑下面的代码:

var classObject = Type.resolveClass("Foo"); 

假设我有相同的包,因为这代码的类Foo,这应该给我一个Class对象与有关它Foo信息。但是,在我的测试中,只有在我首先使用import Foo;时才能正常工作。如果我不导入Foo,则resolveClass将返回null。这对我来说很奇怪。

我注意到Haxe API文档状态:

类必须已经被编译可访问,如果类不在同一个包,完整的“点路径”必须作为的一部分字符串。

但我不清楚什么“必须被编译为可访问”意味着在这种情况下,或者它如何适用于我的问题。

那么,我真的需要import每一个我可能想要解决的课程,还是我缺少其他东西?

回答

2

首先,你应该给Type.resolveClass类的全名。即pack.subpack.AClass。其次,你可以使用--macro include("pack")。其中include函数是haxe.macro.Compiler中的一种方法。默认为--macro为方法查看该类。

最后,haxe中的import my.package.*声明是懒惰的。它告诉编译器解决my.package中的类型,但并不是在开始时真正导入my.package中的所有内容。

+0

文档中提到,如果目标类与调用代码不在同一个包中,则只需使用完全限定名。在任何情况下,在这个例子中'Foo'都在空包中,因此“Foo”**是完全限定名。 – ean5533

+0

我想你提到的文档是http://haxe.org/api/type,它在某种程度上已过时......更新的文档位于http://api.haxe.org/Type.html#resolveClass。通过简单的测试,我确认了完全合格的名称是必需的。这仅仅是为了你的情况'Foo'是在顶层包,它恰好是完全合格的。 –

+0

谢谢你。我尝试使用'--macro include(“my.package”)',我遇到了一个单独的问题,我问了一下[这里](http://stackoverflow.com/questions/21391833/macro-include-is -recursively,包括 - 包 - 不适合换集结TARG)。 – ean5533

0

是的,你必须...... 但你可以haxe.macro.ImportAll(“包”)批次它

+0

你确定这个课程存在于Haxe 3.0.1吗?它未在[Haxe API文档](http://api.haxe.org/haxe/macro/index.html)中列出。 Haxe 3引入了用于导入整个包的'import my.package。*'语法,但我已经尝试过了,它不能解决我的问题。 – ean5533

相关问题