【问题标题】:Enumerate all types in an assembly inside a macro枚举宏内程序集中的所有类型
【发布时间】:2011-08-25 08:29:28
【问题描述】:

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

【问题讨论】:

  • 不要在标题前加上标签,这是多余的,而这正是标签的用途。

标签: nemerle


【解决方案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);
}

【讨论】:

    【解决方案2】:

    除了唐热巴的回答……

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-08
      • 1970-01-01
      • 2017-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多