4

我的一个 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

我认为类方法可能是要走的路,因为它会更容易在测试中模拟,但是什么被认为是保持这样的内存文件的最佳实践呢?

4

1 回答 1

5

这是最常见的成语:

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

操作员说“||=如果变量是nil,则计算表达式的结果并将其存储,否则什么也不做”。这个成语叫做“memoization”。

不要将常量视为优化代码的一种方式,在 Ruby 中它们并不是真正的常量。

于 2011-10-26T22:10:53.467 回答