如何解冻哈希?

How to unfreeze the Hash?

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

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

FrozenError - can't modify frozen Hash

然后我想到了使用dup方法的想法。这个方法好像"unfreeze"原来的对象:

object.to_h.dup

但这对 "deep" 字段没有帮助。对于 "deep" 字段,我必须使用本地 dup 方法。

请问有没有更正确的解决方法?

Rails(或者 ActiveSupport,如果你想学究气的话)将 deep_dup 方法修补到 Hash 中,后者执行深拷贝。所以你应该可以说:

object.to_h.deep_dup

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