将对象写入和读取文件的 Ruby 编程

5

好的,我的目标是方便地将一些数据保存到磁盘以供以后使用。如何简单地编写并读取一个对象呢? 因此,如果我有一个简单的类

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 肯定有内置的方法将其转换回对象,对吧?

2个回答

6

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是一种良好的人类可读形式的字符串表示,也应该提到。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接