Поиск…


Принудительные массивы в список параметров

Предположим, у вас есть массив:

pair = ['Jack','Jill']

И метод, который принимает два аргумента:

def print_pair (a, b)
  puts "#{a} and #{b} are a good couple!"
end

Вы могли бы подумать, что можете просто передать массив:

print_pair(pair) # wrong number of arguments (1 for 2) (ArgumentError)

Поскольку массив - это всего лишь один аргумент, а не два, поэтому Ruby генерирует исключение. Вы можете вытащить каждый элемент отдельно:

print_pair(pair[0], pair[1])

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

print_pair(*pair)

Переменная количество аргументов

Оператор splat удаляет отдельные элементы массива и превращает их в список. Это чаще всего используется для создания метода, который принимает переменное количество аргументов:

# First parameter is the subject and the following parameters are their spouses
def print_spouses(person, *spouses)
  spouses.each do |spouse|
    puts "#{person} married #{spouse}."
  end
end

print_spouses('Elizabeth', 'Conrad', 'Michael', 'Mike', 'Eddie', 'Richard', 'John', 'Larry')

Обратите внимание, что массив учитывает только один элемент в списке, поэтому вам понадобится также оператор splat на вызывающей стороне, если у вас есть массив, который вы хотите передать:

bonaparte = ['Napoleon','Joséphine','Marie Louise']
print_spouses(*bonaparte)    


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow