gpt4 book ai didi

haxe - 从包中获取所有类

转载 作者:行者123 更新时间:2023-12-04 14:27:15 26 4
gpt4 key购买 nike

我想要一种(与平台无关的)方法来列出包中的所有类。

一种可能的方法是获取 Haxe 已知的所有类的列表,然后对其进行过滤。

最佳答案

我做了一个宏来帮助解决这个问题。它在 compiletime haxelib。

haxelib install compiletime

然后将其添加到您的构建中(hxml 文件):
-lib compiletime

然后用它来导入你的类:
// All classes in this package, including sub packages.
var testcases = CompileTime.getAllClasses("my.package");

// All classes in this package, not including sub packages.
var testcases = CompileTime.getAllClasses("my.package",false);

// All classes that extend (or implement) TestCase
var testcases = CompileTime.getAllClasses(TestCase);

// All classes in a package that extend TestCase
var testcases = CompileTime.getAllClasses("my.package",TestCase);

然后你可以遍历它们:
for ( testClass in testcases ) {
var test = Type.createInstance( testClass, [] );
}

请注意,如果您的代码中从未有“import some.package.SomeClass”,则该类将永远不会包含在内,因为已消除了死代码。因此,如果您想确保它被包含在内,即使您从未在代码中明确调用它,您也可以执行以下操作:
CompileTime.importPackage( "mygame.levels" );
CompileTime.getAllClasses( "mygame.levels", GameLevel );

它是如何工作的
CompileTime.getAllClasses是一个宏,它的作用是:
  • 等到编译完成,我们知道我们应用程序中的所有类型/类。
  • 逐一查看,看是否在指定包中
  • 另请参阅它是否扩展(或实现)指定的类/接口(interface)
  • 如果是,请将类名添加到一些特殊的元数据中 - @classLists(...) CompileTimeClassList 上的元数据文件,包含所有匹配类的名称。
  • 在运行时,将元数据与 Type.resolveClass(...) 一起使用创建所有匹配类型的列表。
  • 关于haxe - 从包中获取所有类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27356584/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com