2014-02-10 2 views
0

Я создаю класс, который предназначен для интеллектуального хэша, который знает, как загрузить свои собственные значения, если задано имя файла YAML, а затем выполнить различные операции над ними. За исключением того, что первый шаг меня превзошел. Учитывая этот код:Extended 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

Вы очень близко. Вместо задания самостоятельно, вы просто хотите использовать 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 заменяет ключи и значения вызывающего хэша с них ключи и значения из переданного хэш - именно то, что вы хотите в этом случае. Однако убедитесь, что вы проверяете, что данные YAML действительно являются Hash перед вызовом #replace.

Смежные вопросы