Метод Ruby Class или Constant, лучшая практика - PullRequest
4 голосов
/ 27 октября 2011

Один из моих классов ruby ​​извлекает данные из довольно большого локального XML-файла, который будет меняться только при новом развертывании.

В этом случае рекомендуется хранить документ как постоянный, например:

class Product 
  XML_DOC = Nokogiri::XML(open("#{Rails.root}/myxmlfile.xml"))
end

или для доступа к документу через метод класса, например:

class Product 
 self.xml_doc
    Nokogiri::XML(open("#{Rails.root}/myxmlfile.xml"))
  end
end

Я думаю, что метод класса может быть подходящим способом, так как в тестах будет проще издеваться, но что считается наилучшей практикой для хранения файла в памяти, подобного этому?

1 Ответ

5 голосов
/ 27 октября 2011

Это самая распространенная идиома:

class Product 
    def xml_doc
       @@xml_doc ||= Nokogiri::XML(open("#{Rails.root}/myxmlfile.xml"))
       return @@xml_doc
    end
end

Оператор ||= говорит: «Если переменная nil, вычислите результат выражения и сохраните его, иначе ничего не делайте».Эта идиома называется «запоминание».

Не думайте о константах как о способе оптимизации вашего кода, в Ruby они все равно не являются постоянными.

...