2016-04-14 4 views
1

私はこのようなクラスを持っている:私は節約してきたマーシャルでオブジェクトを(de)直列化するインスタンスメソッドを作成する方法はありますか?

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

class MyClass 
    attr_accessor :a, :b 
end 

は(デ)このようなマーシャルでこのオブジェクトをシリアル化ですインスタンスメソッドを記述する方法はありますそれこのような:

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

とロード:

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

動作しますが、コードを整理したいと思います。

+0

他の方法で保存して読み込むコードではありませんか? – sawa

+0

@ええええ、私の悪い。編集済み – PoVa

答えて

1

あなたは必要なものをすべて手に入れました。なぜそれらを組み立てるだけではないのですか?どの程度:それは、オブジェクトのインスタンスを返すので、loadは、クラスメソッドとして優れている

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 

注こと。 selfを保存することができるので、saveメソッドはインスタンスメソッドにすることができます。

物事を永続化しているパスが変わらない場合は、両方の方法で繰り返さないように定数を定義することもできます。

関連する問題