保存动态Ruby类
发布时间:2020-12-17 03:25:46 所属栏目:百科 来源:网络整理
导读:我有一个好奇的问题.如果我有一个 ruby类然后我在执行期间动态添加类方法,类变量等,那么我还是保存更改的类定义,以便下次启动我的应用程序时我可以再次使用它吗? 解决方法 简单地编组对象(正如其他人所说)不会工作.让我们看一个例子.考虑这个课程: class E
我有一个好奇的问题.如果我有一个
ruby类然后我在执行期间动态添加类方法,类变量等,那么我还是保存更改的类定义,以便下次启动我的应用程序时我可以再次使用它吗?
解决方法
简单地编组对象(正如其他人所说)不会工作.让我们看一个例子.考虑这个课程:
class Extras attr_accessor :contents def test puts "This instance of Extras is OK. Contents is: " + @contents.to_s end def add_method( name ) self.class.send :define_method,name.to_sym do puts "Called " + name.to_s end end end 现在让我们编写一个程序来创建一个实例,为它添加一个方法并将其保存到磁盘: require 'extras' fresh = Extras.new fresh.contents = 314 fresh.test # outputs "This instance of Extras is OK. Contents is: 314" fresh.add_method( :foo ) fresh.foo # outputs "Called foo" serial = Marshal.dump( fresh ) file = File.new "dumpedExample",'w' file.write serial 所以我们可以调用普通方法’test’和动态方法’foo’.让我们看看如果我们编写一个加载保存到磁盘的Example实例的程序会发生什么: require 'extras' file = File.new 'dumpedExample','r' serial = file.read reheated = Marshal.load( serial ) reheated.test # outputs "This instance of Extras is OK. Contents is 314" reheated.foo # throws a NoMethodError exception 所以我们可以看到,虽然保存了实例(包括成员变量的值),但动态方法却没有. 从设计的角度来看,最好将所有添加的代码放入模块中,并在下次运行程序时再将其加载到类中.我们需要一个很好的例子,告诉你如何使用它,但要真正了解这一点. 如果您需要额外的信息来重新创建方法,那么让模块将它们保存为成员变量.包含在模块中的实现,当它包含在类中时,它会查找这些成员变量. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |