2014-02-10 72 views
0

加載我做了一種旨在成爲一個智能散列,知道如果給一個YAML文件名,然後對它們進行各種操作如何加載自己的價值觀一類。除了第一步將我絆倒。鑑於此代碼:擴展哈希想把自身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

你非常接近。而不是自賦值,你只是想用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替換鍵和通話哈希值與它們鍵和傳遞的哈希值 - 你在這種情況下,想要什麼。但是,請確保您在致電#replace之前驗證YAML數據確實是Hash