簡體   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