gpt4 book ai didi

ruby - 有没有办法将 Ruby 对象的人类可读表示转换回这个对象

转载 作者:搜寻专家 更新时间:2023-10-30 23:15:54 25 4
gpt4 key购买 nike

想象一下这样一种情况,我们所知道的关于 Ruby 对象的唯一信息是它的人类可读格式:

#<User::Class::Element:0x2fef43 @field1 = 1, @field2 = two, @field3 = [1,2,3]>

任务是编写一个方法,可以将此表示转换为此表示所指向的类的对象(当然可以访问所有适当的 namespace 、模块、类和方法)。例如:

obj = humanReadableFormat2Obj("#<User::Class::Element:0x2fef43 @field1 = 1, @field2 = \"two\", @field3 = [1,2,3]>") 
puts obj.field1 #=> "1"
puts obj.field2 #=> "two"
p obj.field3 #=> [1, 2, 3]
puts obj.class.to_s #=> User::Class::Element

附言这个任务源于几个大型数据库的同步问题。无需以二进制格式(数百 MB)将对象从一个数据库传输到另一个数据库,您可以只传输一个脚本(几个 KB)并在另一个数据库上执行它以创建适当的对象。

最佳答案

OxOj gems(分别为 XML 和 JSON)可以序列化为相对人类可读的 Ruby 对象。这可能是一个更好的解决方案,因为 inspect 方法并不总是返回 Ruby 对象的所有属性,正如 Sigurd 在评论中提到的那样。

Ox 文档中的示例:

require 'ox'

class Sample
attr_accessor :a, :b, :c

def initialize(a, b, c)
@a = a
@b = b
@c = c
end
end

# Create Object
obj = Sample.new(1, "bee", ['x', :y, 7.0])
# Now dump the Object to an XML String.
xml = Ox.dump(obj)
# Convert the object back into a Sample Object.
obj2 = Ox.parse_obj(xml)

关于ruby - 有没有办法将 Ruby 对象的人类可读表示转换回这个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13818824/

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