gpt4 book ai didi

ruby-on-rails - 为什么 OpenStruct 的值在其转储值发生变化时会发生变化?

转载 作者:太空宇宙 更新时间:2023-11-03 18:25:17 24 4
gpt4 key购买 nike

我想知道发生了什么。

当我执行以下操作时:

new_struct = OpenStruct.new()
new_struct.color = 'Red'
new_struct.number = 4

这导致:

#<OpenStruct color="Red", number=4>

如果我然后创建并更改一些参数:

params = { first: new_struct.marshal_dump }

params[:first][:color] = 'Orange'

这导致 OpenStruct 更改为:

#<OpenStruct color="Orange", number=4>

如果我更改参数哈希,为什么这个 OpenStruct 会发生变化?有没有办法在不更改 OpenStruct 的情况下更改参数散列?

谢谢!

最佳答案

这并不奇怪,marshal_dump 返回带有 OpenStruct 对象命名空间的散列,它像任何其他散列一样是可变的。如果你想阻止这种行为,克隆它:

params = {first: new_struct.marshal_dump.clone}

关于ruby-on-rails - 为什么 OpenStruct 的值在其转储值发生变化时会发生变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12167157/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com