【问题标题】:How to unfreeze the Hash?如何解冻哈希?
【发布时间】:2020-04-03 13:27:29
【问题描述】:

我有一个来自 GraphQL 的对象。我需要处理一个字段,然后返回一个哈希。

为此,我最初尝试使用to_h 方法。但是当我尝试更改字段中的值时,我收到了这个错误:

FrozenError - 无法修改冻结的哈希

然后我想出了使用dup 方法的想法。这种方法似乎“解冻”了原始对象:

object.to_h.dup

但这对“深”领域没有帮助。对于“深度”字段,我必须使用本地 dup 方法。

请告诉我是否有更正确的解决方案?

【问题讨论】:

  • 我认为你需要一个深拷贝/克隆或其他东西来复制深哈希。我不知道解决方案,但这可能会有所帮助rubygems.org/gems/deep_dive
  • @muistooshort 哇,谢谢!

标签: ruby-on-rails ruby-on-rails-5 ruby-on-rails-6


【解决方案1】:

Rails(或者 ActiveSupport,如果你想学究气的话)将 deep_dup 方法修补到 Hash 中,它会进行深层复制。所以你应该可以说:

object.to_h.deep_dup

获取完全可变的哈希版本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-19
    • 2013-06-24
    • 2012-03-05
    • 2013-02-17
    • 2012-04-23
    • 1970-01-01
    相关资源
    最近更新 更多