В Ruby я могу передать каждый элемент массива по отдельности методу, который принимает * args? - PullRequest
2 голосов
/ 10 марта 2011

Учитывая метод, который возвращает массив, а другой принимает произвольное количество аргументов, есть ли способ вызвать второй метод с каждым элементом массива в качестве аргумента?

Например:

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

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

Я хочу позвонить

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

Конечно, это упрощенный пример, в действительности arr может вернуть массив любого размера (скажем, если это поиск ActiveRecord, и я хочу передатьвсе результаты, чтобы запретить), следовательно, моя проблема.

Ответы [ 2 ]

8 голосов
/ 10 марта 2011

Вы можете сделать это:

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

Это сгладит массив в отдельные элементы и передаст их методу в качестве отдельных аргументов. Вы можете сделать это для любого метода, не только для тех, которые принимают * args.

Так в вашем случае:

bar *arr
1 голос
/ 10 марта 2011

Используйте * также, когда вы указываете массив в качестве аргумента:

bar(*arr)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...