如何将设置保存为外部文件中的哈希?

我可以以某种方式使用它

settings = { 'user1' => { 'path' => '/','days' => '5' }, 'user2' => { 'path' => '/tmp/','days' => '3' } } 

在外部文件中作为设置?

如何将其包含在我的脚本中?

在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包含直接的Ruby代码:

 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 

你也可以使用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) 

一个非常简单的方法是使用eval。

的config.txt

 { 'user1' => { 'path' => '/','days' => '5' }, 'user2' => { 'path' => '/tmp/','days' => '3' } } 

program.rb

 configuration = eval(File.read("./config.txt")) puts configuration['user1']