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

时间:2011-03-09 23:21:21

标签: ruby-on-rails ruby

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

例如:

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

def bar(*args)
  args.each {|a| puts a}
end

我想打电话

bar "a", "b" , "c"

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

2 个答案:

答案 0 :(得分:8)

你可以这样做:

my_array = ['a', 'b', 'c']
bar(*my_array)

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

所以在你的情况下:

bar *arr

答案 1 :(得分:1)

当您将数组作为参数时,也使用*

bar(*arr)