繁体   English   中英

AST:访问和仅使用查询方法有什么区别?

[英]AST: what's the difference between visiting and just using query methods?

例如,我从ASTParser获取一个CompilationUnit。 为什么我需要接受访问者而不是使用常规方法:

ASTParser parser ... //all that stuff

CompilationUnit unit = (CompilationUnit) parser.createAST(null);

然后我做:

unit.types() //get all type declarations

从这里开始,我一直沿AST走下去,直到像这样的叶子节点为止,而无需使用访问。 使用访客模式比执行我建议的方法有什么优势?

访客( ASTVisitor子类型)的目的是遍历整个AST,因此您可以轻松检查每个AST节点(除非visit方法返回false,这时将跳过当前节点下方的子树)。

直接查询AST时,您有责任遍历所有有趣的节点。

使用unit.types()您只会获得顶级类型声明,但是使用访问器,很容易处理编译单元中的所有类型,包括嵌套类型。

正确实施后,两种方法应表现出相同的行为。 因此,在需要编写的代码数量和代码的清晰度方面存在差异(训练有素的眼睛会立即理解访问者的用法,但需要仔细阅读手动遍历)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM