Ruby Language
Оператор Splat (*)
Поиск…
Принудительные массивы в список параметров
Предположим, у вас есть массив:
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