【发布时间】:2011-08-25 08:29:28
【问题描述】:
如何在 Nemerle 的 MacroTargets.Assembly 类型的宏属性中获取程序集中的所有类型?
【问题讨论】:
-
不要在标题前加上标签,这是多余的,而这正是标签的用途。
标签: nemerle
如何在 Nemerle 的 MacroTargets.Assembly 类型的宏属性中获取程序集中的所有类型?
【问题讨论】:
标签: nemerle
名称树包含所有类型。可以自己遍历过滤,也可以调用它的GetTypeBuilders方法。
[ Nemerle.MacroUsage
( Nemerle.MacroPhase.WithTypedMembers
, Nemerle.MacroTargets.Assembly
)
]
macro ListTypes()
{
def PrintNameTree(node, depth)
{
repeat (depth)
Write(" ");
Write("|");
WriteLine(node.PartName);
unless (node.Children == null)
{
foreach (child in node.Children.Values)
PrintNameTree(child, depth + 1);
}
}
def env = ImplicitCTX().Env;
def names = env.NameTree;
PrintNameTree(names.NamespaceTree, 0);
}
【讨论】:
除了唐热巴的回答……
您应该使用 Node.EnsureCached() 方法来确保缓存元数据。
【讨论】: