【问题标题】:Ruby writing and reading object to fileRuby 将对象写入和读取到文件
【发布时间】:2013-03-13 20:29:39
【问题描述】:

好的,所以我的目标是轻松地将一些数据保存到磁盘以供以后使用。你如何简单地写然后读一个对象? 所以如果我有一个简单的类

class C
    attr_accessor :a, :b
    def initialize(a, b)
        @a, @b = a, b
    end
end

所以如果我用那么快的速度制作一个 obj

obj = C.new("foo", "bar") #just gave it some random values

然后我可以把它变成一个有点 id

string = obj.to_s #which returns "<C:0x240dcf8 @a="foo", @b="bar">"

我终于可以将这个字符串打印到文件或其他东西了。我的问题是,我该如何将这个 id 再次变成一个对象?我知道我可以自己提取信息并创建一个初始化函数来接收该信息,但是 ruby​​ 肯定有内置的东西可以将它转回一个对象,对吧?

【问题讨论】:

    标签: ruby file object marshalling unmarshalling


    【解决方案1】:

    Ruby 有几种方法可以序列化一个对象:

    c = C.new("foo", "bar")
    
    # using YAML
    require 'yaml'
    yaml_serialized = c.to_yaml
    c_object = YAML.load yaml_serialized
    
    # using Marshal
    marshal_serialized = Marshal.dump c
    c_object = Marshal.load marshal_serialized
    

    【讨论】:

      【解决方案2】:

      那个字符串不能变回一个对象,它本质上只是一个哈希。

      您正在寻找对象的编组或序列化。

      http://www.ruby-doc.org/core-2.0/Marshal.html

      编组库将 Ruby 对象的集合转换为 字节流,允许它们存储在当前活动之外 脚本。随后可能会读取此数据和原始对象 重组。

      这样做总是存在安全问题,请确保您知道您正在阅读的内容。

      还要注意某些类型的对象不能编组,涉及IO等的东西

      编辑:另外,正如 Kyle 所指出的,yaml 是一种很好的人类可读的字符串表示形式,也应该提到

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-09-25
        • 2014-09-25
        • 2023-03-23
        • 1970-01-01
        • 2013-11-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多