我有一些使用1.8 ruby脚本创建的序列化对象。我希望能够使用Marshal将这些对象加载到一个新脚本中,该脚本使用较新版本的ruby(2.2及更高版本)编写。为了让Marshal能够加载这些对象,它需要知道这些对象的数据占用空间,这些对象都是1.8脚本中定义的自定义类。但是,当我require
1.8脚本时,它会抛出语法错误,因为这两个ruby版本之间存在许多语法更改。我不想手动浏览旧脚本并修复每个语法错误,因为脚本很长。
相反,我认为我可以使用Marshal序列化1.8脚本中定义的自定义Class
对象,然后将它们加载到2.2脚本中。一旦2.2脚本知道了这些类,它就可以加载原始的序列化对象,这些对象是最近加载的类的实例。所有这一切都是为了节省自己手动使旧脚本更新的工作。
我可以看到的一个问题是Class
类在1.8和2.2之间可能不一样,因此2.2脚本无法从1.8脚本反序列化Class
对象。有谁知道Class
类是否从1.8到2.2不等?我有办法解决这个问题吗?
查看ruby脚本中可用的所有Class
个对象以便我可以序列化它们的最佳方法是什么?
一个明显的解决方案是在ruby 1.8中编写我的新脚本,但这不是我想要做的,因为更新版本的ruby具有我想要使用的功能和修复。