Ruby 类方法或常量,最佳实践
Posted
技术标签:
【中文标题】Ruby 类方法或常量,最佳实践【英文标题】:Ruby Class method or Constant, best practice 【发布时间】:2011-12-16 02:14:19 【问题描述】:我的一个 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
我认为类方法可能是要走的路,因为它会更容易在测试中模拟,但是保存这样的内存文件的最佳实践是什么?
【问题讨论】:
我喜欢 gioele 对您的具体问题的回答,但我不喜欢您的问题。 :-) 而是将产品对象实例化为程序设置的一部分。 “我只需要一个”并不是放弃面向对象的好理由。 【参考方案1】:这是最常见的成语:
class Product
def xml_doc
@@xml_doc ||= Nokogiri::XML(open("#Rails.root/myxmlfile.xml"))
return @@xml_doc
end
end
||=
运算符表示“如果变量是nil
,则计算表达式的结果并存储它,否则什么也不做”。这个成语叫做“memoization”。
不要将常量视为优化代码的一种方式,在 Ruby 中它们并不是真正的常量。
【讨论】:
你可以用return去掉第二行,不需要。 根据您的 Ruby 实现,隐式返回实际上可能更快。以上是关于Ruby 类方法或常量,最佳实践的主要内容,如果未能解决你的问题,请参考以下文章