我有一个接受*args
哈希的方法,该方法应该与默认选项哈希合并:
def bt_navbar(*args, &block)
options = {
inverse: false,
fixed: false,
}.with_indifferent_access.merge!(args.extract_options!)
# ...
end
因为我不知道该方法的用户在传递选项时是否喜欢使用keys
或strings
,所以我使用[].with_indifferent_access
。
这是一个好的模式,还是有一个更好更成熟的模式?
答案 0 :(得分:2)
假设你有两个位置参数。这就是我写的:
def bt_navbar(arg1, arg2, options = {}, &block)
options.reverse_update({
inverse: false,
fixed: false,
})
# body
end
Hash#reverse_update
是* active_support *的一部分,但实现自己的方法很简单(可能名称为defaults
?)。