ruby: что означает звездочка в «p * 1..10» - PullRequest
37 голосов
/ 13 ноября 2009

линия

p *1..10

делает то же самое, что и

(1..10).each { |x| puts x }

, который дает следующий вывод:

$ ruby -e "p *1..10"
1
2
3
4
5
6
7
8
9
10

это отличный способ, например, при работе с textmate, но что делает звездочка? как это работает? ничего не нашел в сети ...

1 Ответ

61 голосов
/ 13 ноября 2009

Это оператор splat . Вы часто будете видеть, как он используется для разделения массива на параметры функции.

def my_function(param1, param2, param3)
  param1 + param2 + param3
end

my_values = [2, 3, 5]

my_function(*my_values) # returns 10

Чаще всего он используется для принятия произвольного числа аргументов

def my_other_function(to_add, *other_args)
  other_args.map { |arg| arg + to_add }
end

my_other_function(1, 6, 7, 8) # returns [7, 8, 9]

Он также работает для множественного присваивания (хотя оба эти оператора будут работать без знака восклицательного знака):

first, second, third = *my_values
*my_new_array = 7, 11, 13

Для вашего примера, эти два значения будут эквивалентны:

p *1..10
p 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...