Marshal 无法使用默认过程转储哈希(TypeError)

2024-04-25

我有这个 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 中运行。他们的行为不应该有所不同,对吧?


红宝石没有Marshal代码格式,仅适用于数据。你不能编组Procs 或 lambda。

Your apps哈希有一个default_proc, 因为

hsh = Hash.new { some_block }

或多或少是一样的

hsh = {}
hsh.default_proc = ->{ some_block }

爱欧:你的apps哈希包含代码,并且代码无法编组。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Marshal 无法使用默认过程转储哈希(TypeError) 的相关文章

随机推荐

  • 使用 cmake 和 Visual Studio 的一个解决方案中的多个项目

    我有一个 Visual Studio 2010 解决方案 其中包含 5 个项目 两个库和三个应用程序 依赖于库 我现在想将构建系统迁移到 CMake 也能够在 Linux 下编译 我已经了解了如何为一个项目编写 CMakeLists txt
  • Java HashSet 中元素的排序

    为什么第二组和第三组保持顺序 Integer j new Integer 3 4 5 6 7 8 9 LinkedHashSet
  • 在 Homestead 中配置 php.ini

    我正在尝试更改变量最大输入变量在我的 php ini 文件中指定 How many GET POST COOKIE input variables may be accepted max input vars 2500 和跑步 sudo n
  • 有没有办法在 Visual Basic 6.0 应用程序中添加全局错误处理程序?

    VB 6 0没有任何全局处理程序 为了捕获运行时错误 我们需要在每个我们认为可能发生错误的方法中添加一个处理程序 但是 仍然有一些地方可能被遗漏 所以 我们最终会遇到运行时错误 在应用程序的所有方法中添加错误处理程序 唯一的方法吗 不 无法
  • Windows 中的 SQLAlchemy 引擎绝对路径 URL

    我正在尝试连接到 Windows 7 x64 计算机上的 python 3 3 应用程序中的 sqlite database 文件 为此 文档指出 sqlite
  • IOS Safari URL UTI 分享表

    我正在尝试使用 safari 共享按钮和共享表将当前 URL 从 safari 传递到我的应用程序 我希望它进入我的应用程序 而不是让它成为共享扩展 在 Safari 中 共享表不显示我的应用程序 我已注册以下文档类型 UTI 但未成功 p
  • Asp.NET WebApi 基于约定的方法 Url/Route 查询

    我不确定基于 ASP NET WebAPI 约定的休息服务的 最佳实践 前进方向 该服务需要返回资源的 子属性 eg UsersController public User Get int id returns named user via
  • R Markdown:openBinaryFile:不存在(没有这样的文件或目录)

    我开发了一个闪亮的应用程序 允许用户通过 R Markdown 下载 HTML 报告 我正在尝试将自定义 css 和图像包含到我的 rmarkdown 文件中 但是 我不断收到此错误消息 pandoc Could not fetch eit
  • 使用 Apache Axis2 从 WSDL 文件生成单独的 Java 文件而不是单个存根

    目前 我们使用以下命令从给定的 WSDL 文件生成单个存根 wsdl2java uri filename wsdl 这会生成一个包含所有函数调用等的单个 Java Stub 问题是这次生成的 Java Stub 的大小超过 20mb 这使得
  • 如何在symfony2中提交表单ajax?

    我即将使用 Ajax 提交我的表单 我已使用 Ajax 成功提交我的表单POST但不知道如何使用 AjaxSymfony builform builder gt add name text array constraints gt arra
  • 按定义的间隔切割

    R中有没有某种方法可以按定义的间隔进行切割而没有任何中断 例如 如果我想要精确区间 1 10 内的值 默认情况下cut将这个区间分成更小的区间 要切入预定义的间隔 您可以使用以下命令指定中断向量breaks范围 定义一些数据 x lt sa
  • iOS:在故事板中将子类从 UIView 更改为 UIScrollView

    我创建了一个基于故事板的项目 在视图控制器的视图之一中需要放置一些额外的元素 这会导致视图高度增加 使得视图现在必须是可滚动的 是否可以简单地将故事板中 UIView 的类类型更改为 UIScrollView 它真的会将顶级 UIView
  • Neo4JClient:如何创建关系?

    我看到了一篇具有相同标题的帖子 但不幸的是无法通过查看给定的示例找到解决方案 我通过以下方式创建了节点 private static void createExampleNetwork GraphClient client try Cyph
  • gcc 编译器忽略调试构建的未初始化变量警告

    gcc编译器忽略uninitialized variable warning用于调试构建 这对我来说看起来很奇怪 有人可以帮助我理解这一点吗 Program include
  • Rails-嵌套 content_tag

    我正在尝试将内容标签嵌套到自定义帮助器中 以创建如下内容 div class field div
  • Quartz 调度程序最大线程数属性

    我有以下情况 计划运行 8 个任务org quartz threadPool threadCount设置为 5 但实际上我可以看到所有 8 个任务都在运行 这怎么可能 如果我设置org quartz threadPool threadCou
  • Mockito 因无效参数名称异常而启用内联模拟而失败

    我已启用内联模拟 https static javadoc io org mockito mockito core 2 13 0 org mockito Mockito html 39这样我就可以模拟最终类 但现在使用 Junit 运行测试
  • Laravel 5.4 中不允许使用 namespace() 启动路由分组吗? [复制]

    这个问题在这里已经有答案了 使用 Laravel 5 4 确实在有关路由分组的文档中 并且给出了一个示例命名空间 https laravel com docs 5 4 routing route group namespaces Route
  • Rails:上传文件或存储 url

    我正在开发一个表单 我希望允许用户上传文件或输入现有文件的 URL 这个想法是允许用户将各种 多媒体 文件附加到条目中 其中一些可能是硬盘驱动器中的文件 例如图像 Word 文档等 有些可能是网址 youtube 视频 flickr 上的图
  • Marshal 无法使用默认过程转储哈希(TypeError)

    我有这个 ruby 脚本 可以生成哈希并将其保存到文件中 有时该文件不存在或为空 所以我总是先检查它是否存在 然后我将旧值加载到我的哈希中并尝试再次保存 我已经为此苦苦挣扎了很长一段时间 这是一个示例 newAppName ARGV 0 n