reverse_merge 为方法设置默认参数的技巧

先来看一下 hash 的 merge 方法。

h1 = { "a" => 100, "b" => 200 }
h2 = { "b" => 254, "c" => 300 }
h1.merge(h2)   #=> {"a"=>100, "b"=>254, "c"=>300}
h1             #=> {"a"=>100, "b"=>200}

Rails 提供的 reverse_merge 的作用与 merge 正好相反,merge 时后面的优先级高,reverse_merge 时前面 hash 的优先级高。

reverse_mergee 最常见的用处就是在 Rails 中为方法的 hash 参数设置默认值。

<!-- erb中 -->
<%= display_product @product, :show_price => true %>
# helper中
def display_product(product, locals = {})
  locals.reverse_merge! :show_price => false
  render :partial => product, :locals => locals
end

当然现在看来这个例子并不算很好,因为 Ruby 2 Keyword Arguments

如果觉得我的文章对您有用,请在支付宝公益平台找个项目捐点钱。 @Victor May 12, 2017

奉献爱心