2011-08-25 87 views

回答

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); 
} 
1

除了唐雷巴的答案...

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