私のアプリは、鍵が異なっていても空である場合があるjson_element
の異なるメソッドに渡します。rubyを使ってDRYの方法でハッシュ値を抽出する
def act_on_ruby_tag(json_element)
begin
# logger.progname = __method__
logger.debug json_element
code = json_element['CODE']['$'] unless json_element['CODE'].nil?
predicate = json_element['PREDICATE']['$'] unless json_element['PREDICATE'].nil?
replace = json_element['REPLACE-KEY']['$'] unless json_element['REPLACE-KEY'].nil?
hash = json_element['HASH']['$'] unless json_element['HASH'].nil?
私は値をハードコーディング排除したい、そしてどのようにかなり確実ではない:
それを処理するために、私は、次のサンプルコードで抽出をハードコーディングされています。
私は次のようにそれを考え始め:
keys = json_element.keys
keys.each do |k|
set_key = k.downcase
instance_variable_set("@" + set_key, json_element[k]['$']) unless json_element[k].nil?
end
そして方法の残りの部分で例えば@code
を使用しています。
私はメソッドに変わってから、このハードコードされたコードをすべて置き換えようとしていました。
しかし、これが良いパスであるかどうかは完全にはわかりませんでした。
おかげで...私は、キーを抜くと確認するために....「$」は、実際にCobravsMongoose gem.BUTを使用してのartfactであることに気づいた...本当の問題は、あなたが議論されているものですエラーが発生していないかどうかを判断します。 キーの1つに値がありません - それは空です。だから、私は 'nil?'チェックを持っているのです。 – Angela
空と 'nil? 'は2つの異なるものです。ちょっと心に留めておいてください。あなたがナビゲートできるものを探しているだけの場合は、テスト対「v」で十分です。最小限のコードは通常、デバッグが容易です。これらのケースでは – tadman