【问题标题】:Which are the equivalents of the Marshal methods _load and _dump in Ruby YAML?哪些是 Ruby YAML 中 Marshal 方法 _load 和 _dump 的等价物?
【发布时间】:2011-08-18 19:06:27
【问题描述】:

我使用的是标准 YAML 库,我有一个对象,在转储它时将其转换为哈希,并在加载时从哈希转换。在 Marshal 中,我使用了 _load 和 _dump 方法重载,但 Marshal 不是人类可读的 =/

我想要自动加载对象的东西,比如 Marshal =/

类似这样的:

class Foo
    def initialize(numbers)
        @numbers = numbers
    end

    def to_yaml
        dump = {}
        @numbers.each {|k, v| dump[k.to_s] = v.to_s}
        dump.to_yaml
    end

    def self.from_yaml(dump)
        dump = YAML.load(dump)
        numbers = {}
        dump.each {|k, v| numbers[k.to_sym] = v.to_sym}
        new(numbers)
    end
end

bar = Foo.new({:one => :uno, :two => :dos, :three => :tres})
bar_yaml = bar.to_yaml
var = Foo.from_yaml(bar_yaml)
p var

但不太明确

【问题讨论】:

    标签: load marshalling yaml dump


    【解决方案1】:

    除非我遗漏了您问题的某些部分,否则似乎包装上面 juwiley 推荐的方法将是一个非常简单的解决方案。

    require 'yaml'
    class Foo
      def initialize(numbers)
        @numbers = numbers
      end
    
      def to_yaml
        Yaml::dump(self)
      end
    
      def self.from_yaml(dump)
        Yaml::load(dump)
      end
    end
    

    【讨论】:

      【解决方案2】:

      http://corelib.rubyonrails.org/classes/YAML.html

      require "yaml"
      
      test_obj = ["dogs", "cats", "badgers"]
      
      yaml_obj = YAML::dump( test_obj )
                          # -> ---
                               - dogs
                               - cats
                               - badgers
      ruby_obj = YAML::load( yaml_obj )
                          # => ["dogs", "cats", "badgers"]
      ruby_obj == test_obj
                          # => true
      

      【讨论】:

      • 对不起,我想我自己没有完全解释清楚。我需要的是类内部的方法重载。我添加了一个示例。
      【解决方案3】:

      在这种情况下,您可以看看 Rails ActiveRecord 序列化功能

      http://api.rubyonrails.org/classes/ActiveRecord/Base.html

      我假设您想在保存后将 YAML 持久化到数据库中

      【讨论】:

        猜你喜欢
        • 2011-05-05
        • 2011-03-16
        • 2011-02-12
        • 1970-01-01
        • 2010-12-04
        • 2012-04-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多