Ruby Class方法或Constant,最佳实践

Soo*_*uNe 4 ruby class-constants

我的一个ruby类从一个相当大的本地XML文件中提取数据,该文件只会随着新部署而改变.

在这种情况下,最佳做法是将文档保持为常量,例如:

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

或者通过类方法访问文档,例如:

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

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

gio*_*ele 5

这是最常见的习语:

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

||=运营商表示,"如果变量nil,计算expresion的结果,并且存储它,否则什么都不做".这个成语被称为"memoization".

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

  • 您可以使用返回删除第二行,不需要. (4认同)