2016-04-14 37 views
1

我有这样一个类:有没有办法创建一个实例方法(de)序列化与元帅的对象?

class MyClass 
    attr_accessor :a, :b 
end 

有没有办法写一个实例方法,将(DE)与编组序列化这个对象是这样的:我一直留着

class MyClass 
    attr_accessor :a, :b 
    def load(file) 
    #?? 
    end 
    def save(file) 
    #?? 
    end 
end 

它是这样的:

File.open("#{SAVE_PATH}/stats", "wb") {|f| f.write(Marshal.dump(stats)) 

和加载:

stats = Marshal.load(File.binread("#{SAVE_PATH}/stats")) 

它的工作原理,但我想清理我的代码。

+0

不是用于保存和加载的代码吗? – sawa

+0

@sawa是的,我的坏。编辑 – PoVa

回答

1

你已经得到了你需要的所有东西。为什么不把它们组装起来?如何:

def self.load 
    Marshal.load(File.binread("#{SAVE_PATH}/stats")) 
end 

def save 
    File.open("#{SAVE_PATH}/stats", "wb") do |f| 
    f.write(Marshal.dump(self)) 
    end 
end 

注意load是作为一个类的方法更好,因为它返回一个对象的实例。 save方法可以是实例方法,因为您可以使用self作为要保存的内容。

如果你坚持事物的路径没有改变,你可能想为它定义一个常量,以避免在两种方法中重复它。

相关问题