扩展哈希希望从YAML加载自身

时间:2014-02-10 04:52:27

标签: ruby hash

我正在创建一个类,它是一个智能Hash,它知道如果给定YAML文件名如何加载自己的值,然后对它们执行各种操作。除了第一步是惹我生气。鉴于此代码:

    class Agent < Hash
        def initialize
            super
        end

        def load_from_file(filename)
            if (File.file?(filename)) 
                self = YAML.load_file(filename)
            end
        end
    end

...错误信息是一个“无法改变自我的价值”

如何制作从文件中加载自身的哈希?

1 个答案:

答案 0 :(得分:1)

你非常接近。您只想使用Hash#replace

,而不是自我分配
class Agent < Hash
    def initialize
      super
    end

    def load_from_file(filename)
      if (File.file?(filename))
        replace YAML.load_file(filename)
      end
    end
end

#replace用它们的键和传递的哈希值替换调用哈希的键和值 - 在这种情况下正是你想要的。但是,请确保在致电Hash之前验证YAML数据确实是#replace