"core.username"や "core.servers"のようなキーを持っていたRubyの設定クラスは、まさにそのようなYAMLファイルに格納されています。ネストされたハッシュの値を変更する
私はそれを入れ子にするように変更しようとしていますが、古い方法でキーを参照するすべての場所を変更する必要はありません。私は読者-方法でそれを管理している:
def [](key)
namespace, *rest = key.split(".")
target = @config[namespace]
rest.each do |k|
return nil unless target[k]
target = target[k]
end
target
end
しかし、私は働くライタークラスと同じことをしようとしたが、@config
-hashに設定されていない場合。 @config
は、YAML.load_file
eval
と一緒に働くことができましたが、それは私が長く保管しておきたいことではありません。
def []=(key, value)
namespace, *rest = key.split(".")
target = "@config[\"#{namespace}\"]"
rest.each do |key|
target += "[\"#{key}\"]"
end
eval "#{target} = value"
self[key]
end
これを達成するための適切な方法はありますか?プラグインとコードは一切変更しないことが望ましいですか?
あなたは上の分割を忘れていました ""スペースの代わりに、しかしそれ以外のものは、魅力のように機能します。ありがとう! –