我的一个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
我认为类方法可能是要走的路,因为在测试中模拟会更容易,但是保留像这样的内存文件的最佳做法是什么?
答案 0 :(得分:5)
这是最常见的习语:
class Product
def xml_doc
@@xml_doc ||= Nokogiri::XML(open("#{Rails.root}/myxmlfile.xml"))
return @@xml_doc
end
end
||=
运算符说“如果变量是nil
,则计算表达式的结果并存储它,否则什么都不做”。这个成语被称为“memoization”。
不要认为常量是优化代码的一种方法,在Ruby中它们并不是真正的常量。