【发布时间】:2016-09-18 09:35:28
【问题描述】:
有没有一种方法可以获取所有导入的模块或其他方式?据我所知,“allMembers”不包括导入的成员。
我想要实现的是从导入的模块中导入所有成员,但这似乎并不像我想象的那么容易。如果我指定导入的完整模块,我可以轻松获得我想要的成员,但如果我使用当前模块本身,则不能。
所以我的问题是,有没有办法在 D 中获取所有导入模块的名称,因为这样我可以创建在模块上使用“allMembers”的动态方式。
为了证明我的意思。
假设我们有模块 a。
module a;
import b;
import c;
...
foreach (member; __traits(allMembers, a)) {
// members of b and c will not come here ...
}
即使 b 和 c 的导入是公开的,它们也不会来。
我想做的就是在那里检索它们。
【问题讨论】:
-
b和c的导入不会包含在allMembers中,但b和c本身会。如果您可以使用一些isModule(alias symbol)模板(我不知道如何编写)过滤成员,则可以在每个模块上调用allMembers以获取导入的模块。 -
this excellent answer 可以帮到你
-
就我而言,它们根本不包括在内。我会看看我能想出什么,但到目前为止,这些解决方案对我没有任何影响。 @rcorre,已经尝试过该解决方案,但并没有什么不同。我要避免的是全部手动输入模块名称,因为我必须在很多模块上进行操作。不过谢谢
-
对此进行更新,这似乎只是包的问题。当我从一个模块中执行它时它可以工作,但是一旦我从一个包中执行它就会中断。谁能确认这是预期的行为还是?
-
@Bauss 我已经为一个相关功能整理了一个pull request,但是在我等待官方批准时它一直在等待。
标签: module d typetraits