我有一个客户端/服务器原型的想法,其中服务器将持有Marshal.dump的类对象及其版本号的散列。然后客户端可以实例化之前查询关于版本号的服务器,并导入类的较新版本:从套接字连接导入一个Ruby类?
class Stuff
def methods
gibberish
end
end
$obj_hash["Stuff"] = [3.0, Marshal.dump(Stuff)]
我遇到这样的问题:红宝石似乎并不希望让我Marshal.load数据一旦我从服务器下载它,因为类和它的方法不存在于客户端。如果我通过创建一个“虚拟”类来绕过这一点,那么我无法用Marshal.load'ed数据替换虚拟类。如果我只是尝试使用加载的数据作为类,它将根据虚拟类的内容而不是下载的内容运行。
还有另外一种方法可以解决这个问题吗?如果没有,那么我想我可以只是gz代码,然后在另一端评估它,但我试图避免使用eval或通过线路发送容易破译的代码。
在此先感谢您的任何建议。
瑞尔,你不能这样做,类必须在对方,所以你必须把你的源代码,并在客户端EVAL它,如果它不是在那里。 –