Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 使用ruby中的默认选项和块编写更好的方法_Ruby On Rails_Ruby_Arguments_Block - Fatal编程技术网

Ruby on rails 使用ruby中的默认选项和块编写更好的方法

Ruby on rails 使用ruby中的默认选项和块编写更好的方法,ruby-on-rails,ruby,arguments,block,Ruby On Rails,Ruby,Arguments,Block,我有一个Ruby(rails助手)中的方法,我想写得更好,它是一个将许多选项作为散列的方法,如果没有这些选项,它也有一些默认值 目前看起来是这样的: def some_html_helper(options = {}, &block) option1 = options.fetch(:option1, "default option1 value") option2 = options.fetch(:option2, "default option2 value")

我有一个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 %>
因此,可以传入一个或不传入任何选项,其余选项都有默认值,如下所示:

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 %>

一些内容。。。

有没有更好的方法来编写这样的方法?

使用带有默认值的关键字参数:

def m(o1: 42, o2: :foo, o3: :bar, &block)
  puts [o1, o2, o3].inspect
end

m(o3: 3.14)
#⇒ [42, :foo, 3.14]      
或者。或者,使用双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]