構造体から (.to_s を使用して) 文字列を作成する場合、それを構造体に戻す方法はありますか? ヘルパークラスか何かがあるのだろうか。
私の使用例は、構造体に保持または情報を入れてから、インターネット経由で送信し、反対側で構造体を構築することです。
前もって感謝します。
上記の@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">