在Ruby中,我可以将数组的每个元素单独传递给接受*args的方法吗?

Jer*_*nes 2 ruby ruby-on-rails

给定一个返回数组的方法,另一个接受任意数量的参数,有没有办法用数组的每个元素作为参数调用第二个方法?

例如:

def arr
  ["a", "b", "c"]   
end

def bar(*args)
  args.each {|a| puts a}
end
Run Code Online (Sandbox Code Playgroud)

我想打电话

bar "a", "b" , "c"
Run Code Online (Sandbox Code Playgroud)

当然这是一个简化的例子,实际上arr可以返回任何大小的数组(比如说它是一个ActiveRecord查找,我想将所有结果传递给bar),因此我的问题.

nzi*_*nab 8

你可以这样做:

my_array = ['a', 'b', 'c']
bar(*my_array)
Run Code Online (Sandbox Code Playgroud)

这会将数组展平为单个元素,并将它们作为单独的参数传递给方法.您可以对任何类型的方法执行此操作,而不仅仅是接受*args的方法.

所以在你的情况下:

bar *arr
Run Code Online (Sandbox Code Playgroud)