将哈希作为函数参数处理

use*_*052 10 ruby methods hash ruby-on-rails ruby-on-rails-3

我正在使用Ruby on Rails 3,我试图将哈希作为函数参数处理.

例如,如果我以这种方式声明一个函数:

def function_name(options = {})
  ...
end
Run Code Online (Sandbox Code Playgroud)

我想传递给function_name哈希一样

{"key1"=>"value_1", "key2"=>"value2", "..." => "..."}
Run Code Online (Sandbox Code Playgroud)

然后在函数内部使用它.

什么是最好的\常见(Rails)方式呢?

PS:我在extract_option!某个地方看过这个方法,但我不知道在哪里可以找到一些文档以及我是否需要它来完成我的目标.

Jak*_*mpl 15

只需使用您提供的定义:

def function_name(options = {})
  puts options["key1"]
end
Run Code Online (Sandbox Code Playgroud)

称之为:

function_name "key1" => "value1", "key2" => "value2"
Run Code Online (Sandbox Code Playgroud)

要么

function_name({"key1" => "value1", "key2" => "value2"})
Run Code Online (Sandbox Code Playgroud)

阵列#extract_options!只是使用具有可变方法参数的方法,如下所示:

def function_name(*args)
  puts args.inspect
  options = args.extract_options!
  puts options["key1"]
  puts args.inspect
end

function_name "example", "second argument", "key1" => "value"
# prints
["example", "second argument", { "key1" => "value" }]
value
["example", "second argument"]
Run Code Online (Sandbox Code Playgroud)

另一个有用的方法是Hash#symbolize_keys!这使您无需关心是否将字符串或符号传递给函数,以便始终可以访问此类内容options[:key1].