2

Marshal関数を使用してRubyオブジェクトをシリアル化するためにクラスを使用しています。すべてがうまく機能しますが、シリアル化されたデータに関連しない値が渡されると、dump()関数は予想される論理エラーを返します:load()load()

incompatible marshal file format (can't be read)
format version 4.8 required; 45.45 given

必要なのは、このデータが既にシリアル化されているかどうかをロードする前に確認することです。私の目標は、このエラーを回避し、何か他のことをすることです。

4

3 に答える 3

-1

私はパデの方法を適用しましたが、私のために仕事をして、次のように既存または新しく作成されたオブジェクトを取り戻す関数を使用しています:

def get_serialized_banner
  begin
    @banner_obj = Marshal.load(self.path)
  rescue TypeError
    self.path = Marshal.dump(Banner.new())
    self.save
    @banner_obj = Marshal.load(self.path)
  end
  return @banner_obj 
end
于 2012-11-07T00:02:25.677 に答える
-1

たぶん、エラーから救出するだけですか?

begin
  Marshal.load("foobar")
rescue TypeError
  # not a marshalled object, do something else
  puts "warning: could not load ..."
end
于 2012-11-06T16:07:05.110 に答える