2

MacroTargets.Assembly如何在 Nemerle的宏属性中获取程序集中的所有类型?

4

2 回答 2

1

除了Don Reba的回答...

您应该使用 Node.EnsureCached() 方法来确保缓存元数据。

于 2011-08-25T18:46:51.400 回答
1

名称树包含所有类型。你可以自己遍历过滤,也可以调用它的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);
}
于 2011-08-25T14:30:55.600 回答