我有一个Ruby(一个rails帮助器)的方法,我想写得更好,这是一个方法,它需要很多选项作为哈希,如果那些选项不存在,它也有一些默认值。
目前看起来像这样:
def some_html_helper(options = {}, &block)
option1 = options.fetch(:option1, "default option1 value")
option2 = options.fetch(:option2, "default option2 value")
option3 = options.fetch(:option3, "default option3 value")
option4 = options.fetch(:option4, "default option4 value")
option5 = options.fetch(:option5, "default option5 value")
option6 = options.fetch(:option6, "default option6 value")
"return html with options used here and content... #{capture(&block)}"
end
所以可以传入一个或没有选项,其余的都有默认值,如下所示:
<%= some_html_helper option3: "not default value", do %>
Some content...
<% end %>
有没有更好的方法来编写这样的方法?
答案 0 :(得分:2)
使用默认值为
的关键字参数def m(o1: 42, o2: :foo, o3: :bar, &block)
puts [o1, o2, o3].inspect
end
m(o3: 3.14)
#⇒ [42, :foo, 3.14]
或。或者,使用double-splat:
def m(**options, &block)
options = {o1: 42, o2: :foo, o3: :bar}.merge options
puts options.values.inspect
end
m(o3: 3.14)
#⇒ [42, :foo, 3.14]