【问题标题】:Saving and Loading Array of Objects to Disk in Ruby and Shoes在 Ruby 和 Shoes 中将对象数组保存和加载到磁盘
【发布时间】:2015-12-02 12:03:05
【问题描述】:

我正在制作一个基于鞋子的 Ruby GUI 应用程序。它只包括一个类:

class Note
  attr_reader :text, :title, :color
  def initialize(text,title,color)
    @text = text
    @title = title
    @color = color
  end
end

还有一个 Note 类型的对象数组

notes = []  OR  notes = Array.new

我打算做的是将这个数组保存并加载到磁盘。请帮忙。我打算在不涉及背景细节的情况下直接做这件事。
Marshal 很有用,但在类中使用它似乎有点让人头疼。

请帮忙

【问题讨论】:

  • 您不会找到比 Marshal 更简单的解决方案。除此之外,您还可以查看 YAML,或 Sequel 或 Mongoid 等 ORM。
  • 但是编组类是一项艰巨的工作,事实上您必须在类中定义 marshal_dumpmarshal_load 方法,并首先将每个对象显式转换为数组,然后提取实例加载数组中的变量。我一直在寻找更简单的东西,比如在 C++ 中,你所要做的就是:File.read((char*)variable,sizeof(Class)); 并以类似方式编写。或者也许是一些数据库。实际上,我想非常隐式地保存和加载,而不必指定所有细节。

标签: arrays ruby object shoes


【解决方案1】:

我总是推荐标准库中的YAML::Store,以便轻松保存和加载数据。

您可以在我的pomodoro tracker 中看到YAML::Store 的示例实现

您可以将它用作一个大哈希,您可以在其中拥有密钥并放入对象,然后针对简单的 ruby​​ 对象(如 Note 类)正确序列化/反序列化。代码不必进入您的对象,而是进入商店。

【讨论】:

    【解决方案2】:

    如果您只导出/导入静态数据,添加编组功能很容易:

    class Note
      attr_reader :text, :title, :color
      def initialize(text,title,color)
        @text = text
        @title = title
        @color = color
      end
      def marshal_dump
        [@text, @title, @color]
      end
      def marshal_load(array)
        @text, @title, @color = array
      end
    end
    

    【讨论】:

      猜你喜欢
      • 2011-04-09
      • 1970-01-01
      • 2012-11-13
      • 2017-12-08
      • 1970-01-01
      • 2013-04-28
      • 2018-06-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多