3

構造体から (.to_s を使用して) 文字列を作成する場合、それを構造体に戻す方法はありますか? ヘルパークラスか何かがあるのだろうか。

私の使用例は、構造体に保持または情報を入れてから、インターネット経由で送信し、反対側で構造体を構築することです。

前もって感謝します。

4

2 に答える 2

3

上記の@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、人間が判読できます。

于 2013-04-04T13:56:29.897 に答える
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">
于 2013-04-04T12:42:01.153 に答える