我可以以某种方式使用此
settings = {
'user1' => { 'path' => '/','days' => '5' },
'user2' => { 'path' => '/tmp/','days' => '3' }
}
在外部文件中作为设置?
如何将其包含在我的脚本中?
答案 0 :(得分:62)
在Ruby中存储配置数据的最常用方法是使用YAML:
settings.yml
user1:
path: /
days: 5
user2:
path: /tmp/
days: 3
然后将其加载到您的代码中:
require 'yaml'
settings = YAML::load_file "settings.yml"
puts settings.inspect
您可以使用to_yaml
创建YAML文件:
File.open("settings.yml", "w") do |file|
file.write settings.to_yaml
end
也就是说,您也可以使用load
:
load "settings.rb"
但是,您无法访问文件外的局部变量,因此您必须更改代码以使用实例变量或全局变量:
settings.rb
SETTINGS = {
'user1' => { 'path' => '/','days' => '5' },
'user2' => { 'path' => '/tmp/','days' => '3' }
}
@settings = { 'foo' => 1, 'bar' => 2 }
然后加载它:
load "settings.rb"
puts SETTINGS.inspect
puts @settings.inspect
答案 1 :(得分:6)
您也可以使用Marshal
settings = {
'user1' => { 'path' => '/','days' => '5' },
'user2' => { 'path' => '/tmp/','days' => '3' }
}
data=Marshal.dump(settings)
open('output', 'wb') { |f| f.puts data }
data=File.read("output")
p Marshal.load(data)
答案 2 :(得分:2)
一个非常简单的方法是使用eval。
<强>的config.txt 强>
{
'user1' => { 'path' => '/','days' => '5' },
'user2' => { 'path' => '/tmp/','days' => '3' }
}
<强> program.rb 强>
configuration = eval(File.read("./config.txt"))
puts configuration['user1']