2010-10-11 38 views

Trả lời

62

Cách phổ biến nhất để lưu trữ dữ liệu cấu hình trong Ruby là sử dụng YAML:

settings.yml

user1: 
    path:/
    days: 5 

user2: 
    path: /tmp/ 
    days: 3 

Sau đó tải nó trong mã của bạn như thế này:

require 'yaml' 
settings = YAML::load_file "settings.yml" 
puts settings.inspect 

Bạn có thể tạo tệp YAML sử dụng to_yaml:

File.open("settings.yml", "w") do |file| 
    file.write settings.to_yaml 
end 

Điều đó nói rằng, bạn có thể đưa mã Ruby thẳng cũng có thể, sử dụng load:

load "settings.rb" 

Tuy nhiên, bạn không thể truy cập các biến địa phương bên ngoài tập tin, do đó bạn sẽ phải thay đổi mã của bạn để sử dụng một biến dụ hoặc một biến toàn cầu:

settings.rb

SETTINGS = { 
'user1' => { 'path' => '/','days' => '5' }, 
'user2' => { 'path' => '/tmp/','days' => '3' } 
} 
@settings = { 'foo' => 1, 'bar' => 2 } 

Sau đó tải nó như sau:

load "settings.rb" 
puts SETTINGS.inspect 
puts @settings.inspect 
+0

Tốt câu trả lời, nhưng bạn quên 'eval' – glebm

+1

@glebm: Vâng, và có mục đích. Tôi sử dụng 'eval' khi đó là tùy chọn duy nhất có sẵn, không phải khác. –

+2

đúng, nhưng chỉ để người đọc biết kẻ thù của mình tôi sẽ đề cập đến nó :) – glebm

6

bạn cũng có thể sử dụng 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

Một thực sự đơn giản là sử dụng eval.

config.txt

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

program.rb

configuration = eval(File.read("./config.txt")) 
puts configuration['user1'] 
Các vấn đề liên quan