我应该如何将一系列嵌套的哈希(嵌套到任意深度)转换为一系列嵌套的 OpenStructs?我正在加载一个大的 YAML 文件,但我不喜欢accessing['everything']['like']['this']
.
我使用 Google 找到了一些部分解决方案,但我认为这会是一个很好的问题。
这是我从http://andreapavoni.com/blog/2013/4/create-recursive-openstruct-from-a-ruby-hash找到的解决方案之一:
# deep_struct.rb
require 'ostruct'
class DeepStruct < OpenStruct
def initialize(hash=nil)
@table = {}
@hash_table = {}
if hash
hash.each do |k,v|
@table[k.to_sym] = (v.is_a?(Hash) ? self.class.new(v) : v)
@hash_table[k.to_sym] = v
new_ostruct_member(k)
end
end
end
def to_h
@hash_table
end
end
这个解决方案的问题是它没有考虑数组。