1

私のハッシュ:

$settings =
{
  :first_run=>true, :version=>1.01, :game_variables=>{}, :game_switches=>{9=>false}
}

コードを保存:

marshal_dump = Marshal.dump($settings)
file = File.new(file_path, 'w')
file.write marshal_dump
file.close

ロードコード:

$settings = Marshal.load(File.binread(file_path))

これまでのところ、すべてがまだ機能しています。しかし、$ settingsハッシュに別の変数を追加して保存し、それをロードしようとするとすぐに、次のようになります。

$settings[:test] = 'woohoo!'
save() # saves the hash to disk
load() # loads the hash from disk

エラーが発生します:

Argument error occured. dump format error(0xa)

解決策:( ありがとうはilanberciに行きます)

def dump_settings
    File.open(FILENAME,'w') do|file|
      Marshal.dump($settings, file)
    end
  end

  def load_settings
    $settings = if File.exists?(FILENAME)
      File.open(FILENAME) do|file|
        Marshal.load(file)
      end
      else
        create # custom function that fills the $settings for first use
      end
  end
4

1 に答える 1

3

バイナリモードでファイルを読み取っていますが、内容はそのようにダンプされていません。

使用する:

$ settings = Marshal.load(File.open(file_path))

于 2013-02-20T21:39:11.273 に答える