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

三 14th, 2012

先来看一下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}

reverse_merge的作用与merge正好相反,merge时后面的优先级高,reverse_merge时前面hash的优先级高。
注意:这个方法是rails的activesupport提供的,不是ruby自带的方法。

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

下面来个示例。
给Partials中Locals参数设置默认值

# 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

上面的方法是推荐的方法,比较好,如果你觉得太麻烦,也可以用一些hack的方法,有点ugly。

在erb中直接

locals: { show_price: defined?(show_price) ? show_price : false }
标签:
>>原创文章,欢迎转载。转载请注明:转载自Ruby迷,谢谢!
>>原文链接地址:reverse_merge为方法设置默认参数的技巧
  1. PikachuEXE
    三 16th, 201219:42

    设在helper也好像不太美观…

  2. 相当拽
    三 16th, 201211:37

    相当不错哦!

Cancel reply