下面几个小程序在ruby 1.8上都是顺利运行的,升级到1.9.1之后,发生许多method no defined的错误
[code]
ptr = DL.malloc(DL.sizeof('IIIIPPPP'))
[/code]
错误是: undefined method `sizeof' for DL:Module,在DL::Importer下是有一个sizeof,但是DL::Importer.sizeof('IIIIPPPP') 会报can not partser type..的错误
[code]
ptr = [0,1,0,0].pack('IIII').to_ptr
[/code]
这段代码也不能工作了,错误时to_ptr no define
有时候ruby一升级,就意味着许多东西要重新折腾,这些问题该如何fix呢?
不知道ruby有没有类似C#的条件编译,以便在不同版本下都顺利运行?
[code="ruby"]include DL
CPtr.malloc SIZEOF_INT*4 + SIZEOF_VOIDP*4
p = CPtr[[0,1,0,0].pack 'IIII']
DL 在 1.9 被 yugui 姐姐重写了 ……
刚开始时文档和注释都没有(因为要保持和代码一致,把文档放在最后做)
比较好的参考是源代码目录中的 ext/dl/test 和 ext/win32ole/sample
1.9 是 major version,不相容的部分也多,和 1.8 之间的区别就像 python 3 之于 python 2.5 ……
某个总结:
[url]http://www.elctech.com/articles/ruby-1-9-compatibility-a-three-step-ladder-to-bliss[/url]
另外镐头书 1.9 版也值得参考。