posts - 256, comments - 1319, trackbacks - 41, articles - 8
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

IronPython的第三块鳞片(补充)

Posted on 2004-09-23 16:47 FantasySoft 阅读(801) 评论(2)  编辑 收藏 所属分类: All About SoftSharp IronPython

         在9月份的Mail List中还有一个message也是很有价值的。在Interactive的方式下,键入如下两行代码:

>>>from System.Console import *
>>>WriteLine("Hello,world!")

屏幕上并不会出现我们所期待的Hello,world! 倒是出现了一个True。如果将第二行改为WriteLine("{0}","Hello,World!"),我们就能够看到我们期待的Hello,world!了,这是怎么回事呢?
        因为IronPython在调用CLR中方法的时候,都是使用了反射的机制。当一个方法被重载(overload)了,也就是说有多个同名函数对应类型不同或者个数不同参数的时候,这些函数都会存放在一个list中。IronPython并没有去搜索最适合的方法,只是简单地检查了参数的个数是否匹配,那么结果就可想而知了:参数个数为1的WriteLine函数有很多,而WriteLine(bool)在整个list中排在了最前面,而且在Python的语法当中,string类型是可以隐式转换为bool类型的,因此WriteLine(bool)就被调用了。而对应参数个数为2的WriteLine方法就只有一个WriteLine(String,Object),那么在Interactive方式下WriteLine("{0}","Hello,World!")是可以被正确调用的。

Feedback

#1楼    回复  引用    

2004-09-23 17:11 by 问题男 [未注册用户]
寒~~~这该是IronPython实现中的严重bug吧,呵呵

#2楼 [楼主]   回复  引用  查看    

2004-09-23 17:52 by FantasySoft      
是的,确实是它的一个bug。毕竟是0.6 version,有那么的bug也属正常了。

一直都在看Source Code,可惜天生愚钝,看了几天都不得要领,郁闷~~~

标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2004-10-14 17:09 编辑过
 
另存  打印