新的DLR tree改变了Visitor的设计

本文探讨了访问DLRtree使用visitor模式的实现方法,最初采用基于NodeType属性的Visit()方法进行节点类型判断,后改为传统的Visitor模式设计,即在每个需访问的类中实现Accept()/Visit()方法。此改变预计将在IronPython 2.1中体现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[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中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值