【问题标题】:How do I resolveClass without importing the type first?如何在不先导入类型的情况下解析类?
【发布时间】:2014-01-24 03:16:22
【问题描述】:

请注意,我在面向 Neko 的 Linux 上使用 Haxe 3.0.1。

考虑以下代码:

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

假设我在与此代码相同的包中有一个类 Foo,这应该给我一个 Class 对象,其中包含有关 Foo 的信息。但是,在我的测试中,它只有在我首先 import Foo; 时才有效。如果我不导入Foo,那么resolveClass 将返回null。这对我来说很奇怪。

我注意到Haxe API docs 状态:

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

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

那么,我真的需要import 我可能想要解决的每个类,还是我错过了其他东西?

【问题讨论】:

    标签: haxe


    【解决方案1】:

    首先,您应该给Type.resolveClass 类的完全限定名。 IE。 pack.subpack.AClass.

    其次,您可以使用--macro include("pack")。其中include 函数是来自haxe.macro.Compiler 的方法。 --macro 默认情况下会在该类中查找方法。

    最后,haxe 中的import my.package.* 语句是惰性的。它告诉编译器解析my.package 中的类型,但并没有真正导入my.package 中的所有内容。

    【讨论】:

    • 文档提到,如果目标类与调用代码不在同一个包中,则只需要使用完全限定名称。无论如何,在此示例中,Foo 位于空包中,因此“Foo”完全限定名称。
    • 我猜你提到的文档是 haxe.org/api/type ,它有点过时了......更新的文档在 api.haxe.org/Type.html#resolveClass 。通过简单的测试,我确认完全限定名称是必需的。只是为了你的情况Foo在顶级包中,恰好是完全合格的。
    • 谢谢。我尝试使用--macro include("my.package"),但遇到了一个单独的问题,我曾询问过here
    【解决方案2】:

    是的,你必须... 但是您可以使用 haxe.macro.ImportAll("package") 对其进行批处理

    【讨论】:

    • 你确定这个类存在于 Haxe 3.0.1 中吗?它没有在Haxe API docs 中列出。 Haxe 3 引入了 import my.package.* 语法来导入整个包,但我已经尝试过了,它并没有解决我的问题。
    猜你喜欢
    • 1970-01-01
    • 2021-12-05
    • 2015-01-27
    • 2018-07-31
    • 1970-01-01
    • 1970-01-01
    • 2012-08-14
    • 2018-02-14
    • 1970-01-01
    相关资源
    最近更新 更多