等价于Ruby的Java .properties文件?

时间:2020-03-06 14:24:11  来源:igfitidea点击:

我需要将一些简单的属性存储在文件中,然后从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]