gpt4 book ai didi

ruby - 覆盖 ruby​​ 对象的 id(使用 OpenStruct 创建)

转载 作者:数据小太阳 更新时间:2023-10-29 07:14:47 27 4
gpt4 key购买 nike

我想使用 OpenStruct 将散列转换为对象具有 id 属性,但是生成的 object#id 返回 native 对象 ID,例如

test = OpenStruct.new({:id => 666})
test.id # => 70262018230400

有没有办法覆盖这个?目前我的解决方法还不是很好。

最佳答案

OpenStructunless self.respond_to?(name) 检查和 method_missing 中结合使用 define_method 调用>。这意味着如果属性名称与对象上任何现有方法的名称冲突,那么您将遇到此问题。

tokland's回答是否好,但另一种选择是取消定义 id 方法,例如

test.instance_eval('undef id')

您也可以将其合并到您自己定制的 OpenStruct 版本中,例如

class OpenStruct2 < OpenStruct
undef id
end

irb(main):009:0> test2 = OpenStruct2.new({:id => 666})
=> #<OpenStruct2 id=666>
irb(main):010:0> test2.id
=> 666

关于ruby - 覆盖 ruby​​ 对象的 id(使用 OpenStruct 创建),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4725329/

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