[url=http://rednaxelafx.iteye.com/blog/246814]之前的一帖[/url]提到过访问DLR tree所使用的visitor的实现方式,与LINQ相同,都是由一个总的Visit()方法通过每个AST节点上的NodeType属性来判断节点类型并分发到具体的VisitXXX()方法上。
这种设计与常见的Visitor模式并不相同——常见的方式是为需要被访问的类层次中每个类设计一对Accept()/Visit()方法,以此实现double-dispatch的Visitor。在最近更新的IronPython/IronRuby源码中,可以看到ExpressionTreeVisitor已经确认会作为公开API提供。相应的,visitor也从基于NodeType的大switch的设计改回到普通的Visitor模式的设计。
根据观察,这些改变将不会进入IronPython 2.0,而会进入更后面的IronPython 2.1中。
这种设计与常见的Visitor模式并不相同——常见的方式是为需要被访问的类层次中每个类设计一对Accept()/Visit()方法,以此实现double-dispatch的Visitor。在最近更新的IronPython/IronRuby源码中,可以看到ExpressionTreeVisitor已经确认会作为公开API提供。相应的,visitor也从基于NodeType的大switch的设计改回到普通的Visitor模式的设计。
根据观察,这些改变将不会进入IronPython 2.0,而会进入更后面的IronPython 2.1中。
本文探讨了访问DLRtree使用visitor模式的实现方法,最初采用基于NodeType属性的Visit()方法进行节点类型判断,后改为传统的Visitor模式设计,即在每个需访问的类中实现Accept()/Visit()方法。此改变预计将在IronPython 2.1中体现。
1701

被折叠的 条评论
为什么被折叠?



