我有这个 ruby 脚本,它生成一个哈希并将其保存到一个文件中。
有时文件不存在或为空,所以我总是先检查它的存在。然后我将旧值加载到我的哈希中并尝试再次保存。我已经为此苦苦挣扎了很长时间。这是一个示例:
newAppName = ARGV[0]
newApp = Hash.new
newApp["url"] = ARGV[1]
newApp["ports"] = ARGV[2].to_i
apps = Hash.new { |h, k| h[k] = Hash.new }
# apps["test"] = {"url" => "www.test.com", "ports" => 3 }
appsFile = '/home/test/data/apps'
if File.exists?(appsFile)
apps = Marshal.load File.read(appsFile)
else
puts "Inserting first app into list..."
end
apps[newAppName] = newApp
serialisedApps = Marshal.dump(apps) # This line is where I get the error
File.open(appsFile, 'w') {|f| f.write(serialisedApps) }
现在我得到这个错误:
script.rb:53:in `dump': can't dump hash with default proc (TypeError)`
这是什么意思?我的哈希错了吗?我如何解决它?
我尝试使用 irb 手动执行它,它工作正常,尽管我在 Mac 上进行了测试,并且该脚本在 Linux 中运行。他们不应该表现不同,对吧?