如何将* args与默认选项哈希合并?

时间:2012-09-13 13:17:31

标签: ruby-on-rails ruby design-patterns

我有一个接受*args哈希的方法,该方法应该与默认选项哈希合并:

def bt_navbar(*args, &block)
  options = {
    inverse: false,
    fixed: false,
  }.with_indifferent_access.merge!(args.extract_options!)
  # ...
end

因为我不知道该方法的用户在传递选项时是否喜欢使用keysstrings,所以我使用[].with_indifferent_access

这是一个好的模式,还是有一个更好更成熟的模式?

1 个答案:

答案 0 :(得分:2)

假设你有两个位置参数。这就是我写的:

def bt_navbar(arg1, arg2, options = {}, &block)
  options.reverse_update({
    inverse: false,
    fixed: false,
  })

  # body
end
  1. 我不愿意支持字符串键。
  2. Hash#reverse_update是* active_support *的一部分,但实现自己的方法很简单(可能名称为defaults?)。