Ruby Class方法或Constant,最佳实践

时间:2011-10-26 21:40:02

标签: ruby class-constants

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

答案 0 :(得分:5)

这是最常见的习语:

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

||=运算符说“如果变量是nil,则计算表达式的结果并存储它,否则什么都不做”。这个成语被称为“memoization”。

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

相关问题