有没有一种方法可以创建一个实例方法,用封送来(反)序列化对象



我有一个这样的类:

class MyClass
  attr_accessor :a, :b
end

有没有一种方法可以编写一个实例方法,用封送来(反)序列化这个对象,如下所示:

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"))

它有效,但我想清理我的代码。

您已经拥有了所需的所有部件。为什么不把它们组装起来呢?怎么样:

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作为要保存的东西。

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

最新更新