我必须知道,如果我将从struct(使用.to_s)创建字符串,是否有任何方法可以使它返回结构?我想知道是否有一些辅助课或其他什么。
我的使用方法是在struct中保存或信息,然后通过互联网发送,并在另一端从中构建一个结构。
提前致谢。
答案 0 :(得分:3)
清除以上@Semyon提供的其他选项:
YAML
便携式,但使用Ruby特定。支持以只有Ruby才能真正理解的特殊方式序列化任何Ruby对象。如果你想在Rubies之间移植而不是语言,YAML就是你要走的路:
require 'yaml'
obj = [1,2,3]
YAML.dump(obj) #=> Something like "---\n- 1\n- 2\n- 3\n"
YAML.load(YAML.dump(o)) #=> [1,2,3]
JSON
对于这类事情,JSON是最广泛认可的便携式数据标准。可以在Rubies,语言和系统之间移植。
require 'json'
obj = [1,2,3]
obj.to_json #=> "[1,2,3]"
JSON.load("[1,2,3]") #=> [1,2,3]
与Marshal
不同,两者都是人类可读的。
答案 1 :(得分:2)
您从struct.to_s
获得的字符串仅供检查。要转移结构,您需要在一侧对其进行序列化,然后从另一侧对其进行反序列化。有各种格式,包括JSON,YAML和Marshal。最后一个产生非人类可读的字节流,但它最容易使用:
Person = Struct.new(:first_name, :last_name)
me = Person.new("Semyon", "Perepelitsa")
p data = Marshal.dump(me)
"\x04\bS:\vPerson\a:\x0Ffirst_nameI\"\vSemyon\x06:\x06ET:\x0Elast_nameI\"\x10Perepelitsa\x06;\aT"
# on the other side
p Marshal.load(data)
#<struct Person first_name="Semyon", last_name="Perepelitsa">