IronPython的第六块鳞片(续)

       在上篇Post中,我提到了IronPython0.7的一个问题:通过key来获取Dictionary类型变量的value,如果key不存在,Console将不会有任何的提示,而CPython则会有相应的KeyError的提示信息。后来,我在IronPython的MessageBoard上发了一个帖子来说明这个问题。结果第二天,IronPython的老爸——Jim Hugunin给予了回复。他认为如果一段代码在IronPython下执行与CPython下执行存在不同,大多数的情况下都会是一个bug。同时,他又提出了另外一个问题,如果Dictionary是.NET的标准数据类型,如Hashtable,那么将会很难处理这种情况。以下是他给出的示例代码:       

None.gif>>> from System.Collections import *  
None.gif
>>> d =
 Hashtable() 
None.gif
>>> d["exists"= 1
 
None.gif
>>> d["exists"

None.gif
1
 
None.gif
>>> repr(d["missing"
]) 
None.gif
'None' 

        首先要说明一下repr这个function。它是内建的一个函数,函数的参数是一个object的instance,调用的结果是返回一个String,这个String则描述了instance,类似于常见的toString方法。我们回到示例代码上来,由于d是一个Hashtable,其本质与Dictionary几乎是一致的:都是存放着key/value pair(键值对)。事实上在Hashtable中,通过key去获取相应的值的时候,如果key不存在,并不会产生任何exception,而是返回一个null。那么,这样反映出来的对象行为与Dictionary就会有不同的地方。Jim的言下之意是,给出一个KeyError的提示不难,但是难就难在,引入了这些在.NET下才有的对象,如何去定义这些对象在IronPython下的行为,是继续保持它们在.NET下的行为呢?还是对它们的行为进行改造,以适合Python的环境呢?Jim认为这个问题是十分重要的,用他的一句话来说明就是:Figuring out the right behavior for these kinds of foreign types in IronPython is one of the bigger interesting design questions. 
        

转载于:https://www.cnblogs.com/perhaps/archive/2005/03/31/128920.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值