等价于Ruby的Java .properties文件?
我需要将一些简单的属性存储在文件中,然后从Ruby访问它们。
我绝对喜欢Java中此类属性的标准.properties文件格式(使用java.util.Properties类)...它简单,易用且易于阅读。
因此,在某个地方是否有一个Ruby类可以让我无需花费很多精力从类似的文件中加载一些键值对?
我不想使用XML,所以请不要建议REXML(我的目的不保证"尖括号税")。
我曾考虑过推出自己的解决方案...可能大约需要5-10行代码,但是我还是宁愿使用现有的库(如果它本质上是从文件构建的哈希值)...那样将其降低到1行...
更新:它实际上是一个简单的Ruby应用程序,而不是rails,但是我认为YAML会做的很好(这在我脑海中,但是我已经忘记了它……见过但从未使用过),谢谢大家!
解决方案
这是用于Rails应用程序还是用于Ruby的应用程序?
实际上,无论哪种方式,我们都可以将属性粘贴在yaml文件中,然后将其" YAML :: Load(File.open(" file")))"粘贴。
迈克·斯通的注:这样做实际上会更好:
File.open("file") { |yf| YAML::load(yf) }
或者
YAML.load_file("file")
如ruby docs所建议的那样,否则该文件直到垃圾回收才被关闭,但是无论:-)都是好的建议
我们可以考虑使用YAML,而不是配置文件的.properties样式。 YAML在Ruby on Rails中用于数据库配置,并已在其他语言(Python,Java,Perl和其他语言)中流行。
Ruby YAML模块的概述在这里:http://www.ruby-doc.org/core/classes/YAML.html
YAML的主页在这里:http://yaml.org
Devender Gollapally编写了一个类来精确地做到这一点:
...尽管我建议我们最好使用YAML文件。
如上所述,YAML将完美地做到这一点。例如,在我的一个Ruby脚本中,我有一个YAML文件,例如:
migration: customer: Example Customer test: false sources: - name: Use the Source engine: Foo - name: Sourcey engine: Bar
然后我在Ruby中将其用作:
config = YAML.load_file(File.join(File.dirname(__FILE__), ARGV[0])) puts config['migration']['customer'] config['sources'].each do |source| puts source['name'] end
另一种选择是简单地使用另一个Ruby文件作为配置文件。
例如,创建一个名为" options"的文件
{ :blah => 'blee', :foo => 'bar', :items => ['item1', 'item2'], :stuff => true }
然后在Ruby代码中执行以下操作:
ops = eval(File.open('options') {|f| f.read }) puts ops[:foo]