Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

mergeでhashをくっつける

Hashにはmergeというメソッドがあります。
コイツをつかえば、二つのhashを一本に統合することができます。

{hoge: 1, piyo: 2}.merge!({fuga: 3})
#=> {:hoge=>1, :piyo=>2, :fuga=>3}

同名keyがあった場合、上書きします。
この点に気をつけないと意図しない挙動をする恐れがあるので気をつけてください。

{hoge: 1, piyo: 2}.merge!({fuga: 3, piyo: 4})
#=> {:hoge=>1, :piyo=>4, :fuga=>3}

前の記事で扱ったassert_valid_keysと組み合わせる事で
安全確実に処理本体へhashを渡す事ができます。
たとえばこんな感じ

def method(options={})
  options.assert_valid_keys(:foo, :bar)

  default_params = {foo: 1, bar: 2}

  tmp = get_outer_params
  default_params.merge!(tmp)

  method_body
end

private
def get_outer_params
  ##他所からparamを毟ってくる。I18とか。
end

def method_body
  ##受け取ったoptionsで何かする
end