我有一个这样的课程:
class MyClass
attr_accessor :a, :b
end
有没有办法编写一个实例方法,可以用这样的marshal(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 :(得分: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
作为要保存的内容。
如果您持久化的路径没有改变,您可能希望为此定义一个常量,以避免在两种方法中重复它。