3

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

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

因为我不知道方法的用户是否喜欢使用keys或者strings传递选项时,我使用[].with_indifferent_access.

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

4

1 回答 1

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? 的名称)。
于 2012-09-13T13:57:15.073 回答