我将配置数据存储在以平面文件编写的哈希中。我想将哈希值导入我的类中,以便我可以调用相应的方法。
example.rb
{
:test1 => { :url => 'http://www.google.com' },
:test2 => {
{ :title => 'This' } => {:failure => 'sendemal'}
}
}
simpleclass.rb
class Simple
def initialize(file_name)
# Parse the hash
file = File.open(file_name, "r")
@data = file.read
file.close
end
def print
@data
end
a = Simple.new("simpleexample.rb")
b = a.print
puts b.class # => String
如何将任何“Hashified”字符串转换为实际的Hash?
答案 0 :(得分:7)
您可以使用eval(@data)
,但最好是使用更安全,更简单的数据格式,例如JSON。
答案 1 :(得分:2)
您可以尝试 YAML.load 方法
示例:
YAML.load("{test: 't_value'}")
这将返回以下哈希值。
{"test"=>"t_value"}
您还可以使用 eval 方法
示例:
eval("{test: 't_value'}")
这也将返回相同的哈希值
{"test"=>"t_value"}
希望这会有所帮助。
答案 2 :(得分:1)
我想使用json gem。
在你的Gemfile中使用
gem 'json'
然后运行bundle install
。
在你的程序中,你需要宝石。
require 'json'
然后您可以通过执行以下操作创建“Hashfield”字符串:
hash_as_string = hash_object.to_json
并将其写入您的平面文件。
最后,您可以通过以下方式轻松阅读:
my_hash = JSON.load(File.read('your_flat_file_name'))
这很简单,也很容易。
答案 3 :(得分:0)
如果不清楚,它只是必须包含在JSON文件中的哈希。假设该文件是“simpleexample.json”:
puts File.read("simpleexample.json")
# #{"test1":{"url":"http://www.google.com"},"test2":{"{:title=>\"This\"}":{"failure":"sendemal"}}}
代码可以在普通的Ruby源文件中,“simpleclass.rb”:
puts File.read("simpleclass.rb")
# class Simple
# def initialize(example_file_name)
# @data = JSON.parse(File.read(example_file_name))
# end
# def print
# @data
# end
# end
然后我们可以写:
require 'json'
require_relative "simpleclass"
a = Simple.new("simpleexample.json")
#=> #<Simple:0x007ffd2189bab8 @data={"test1"=>{"url"=>"http://www.google.com"},
# "test2"=>{"{:title=>\"This\"}"=>{"failure"=>"sendemal"}}}>
a.print
#=> {"test1"=>{"url"=>"http://www.google.com"},
# "test2"=>{"{:title=>\"This\"}"=>{"failure"=>"sendemal"}}}
a.class
#=> Simple
从哈希构造JSON文件:
h = { :test1=>{ :url=>'http://www.google.com' },
:test2=>{ { :title=>'This' }=>{:failure=>'sendemal' } } }
我们写道:
File.write("simpleexample.json", JSON.generate(h))
#=> 95