我必须知道,如果我要从 struct (使用 .to_s)制作字符串,有什么办法可以让它返回 struct 吗?我想知道是否有一些帮助类或其他东西。
我的使用案例是在结构中保存或信息,然后通过互联网发送它并在另一端从它构建一个结构。
提前致谢。
要清除上面@Semyon 给出的其他选项:
YAML
可移植,但在其使用方面是特定于 Ruby 的。支持以只有 Ruby 才能真正理解的特殊方式序列化任何 Ruby 对象。如果您希望在 Ruby 之间而不是语言之间具有可移植性,那么 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 是此类事物最广泛认可和可移植的数据标准。可在 Ruby、语言和系统之间移植。
require 'json'
obj = [1,2,3]
obj.to_json #=> "[1,2,3]"
JSON.load("[1,2,3]") #=> [1,2,3]
与 不同Marshal
,两者都是人类可读的。
您从中获得的字符串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">