我有一个这样的类:
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
作为要保存的东西。
如果你持久化事物的路径没有改变,你可能也需要为此定义一个常量,以避免在两种方法中重复它。