Функция Ruby с неограниченным количеством параметров - PullRequest
17 голосов
/ 17 мая 2009

Как мне создать функцию Ruby, у которой нет явного числа параметров?

Требуется больше разъяснений?

Ответы [ 4 ]

24 голосов
/ 17 мая 2009

Используйте оператор сплат *

def foo(a,b,c,*others)
   # this function has at least three arguments,
   # but might have more
   puts a
   puts b
   puts c
   puts others.join(',')
end
foo(1,2,3,4,5,6,7,8,9)
# prints:
# 1
# 2
# 3
# 4,5,6,7,8,9
17 голосов
/ 17 мая 2009

Используйте *rest. вот хороший маленький учебник .

6 голосов
/ 11 декабря 2014

(Если бы я мог добавить комментарий к принятому ответу, я бы сделал это, но у меня недостаточно баллов.)

Предупреждение. Будьте осторожны при использовании методов обработки общих данных. Это отличный кусок синтаксического сахара, но - это ограничения на количество аргументов, которые вы можете передать методу до того, как получите SystemStackError. Я достиг этого предела, используя redis.mapped_mget *keys. Кроме того, предел будет меняться в зависимости от того, где вы используете оператор сплат. Например, при локальном запуске pry я могу выделить в метод массивы из более чем 130 000 элементов. Однако, если он работает внутри целлулоидного актера, этот предел может составлять менее 16 000 элементов.

2 голосов
/ 20 мая 2009

Вот еще одна статья на эту тему:

www.misuse.org / наука / 2008/01/30 / ближние многооконные аргументы в-рубиновое-это-ваш-друг

Дает несколько хороших примеров прокручивания и разворачивания ваших параметров с помощью "*"

...