Что за функция в Ruby позволяет "p * 1..10" распечатывать числа 1-10? - PullRequest
5 голосов
/ 02 апреля 2009
require 'pp'

p *1..10

Это печатает 1-10. Почему это так кратко? А что еще можно с этим сделать?

Ответы [ 2 ]

13 голосов
/ 02 апреля 2009

Это оператор "сплат". Он может использоваться для разнесения массивов и диапазонов и сбора значений во время присваивания.

Здесь собраны значения в назначении:

a, *b = 1,2,3,4

=> a = 1
   b = [2,3,4]

В этом примере значения во внутреннем массиве ([3,4] one) разбираются и собираются в содержащий массив:

a = [1,2, *[3,4]]

=> a = [1,2,3,4]

Вы можете определить функции, которые собирают аргументы в массив:

def foo(*args)
  p args
end

foo(1,2,"three",4)

=> [1,2,"three",4]
8 голосов
/ 02 апреля 2009

Хорошо:

  • require pp импортирует функцию красивой печати
  • p - это метод симпатичной печати с переменными, который симпатично печатает каждый аргумент
  • * означает «расширить аргумент в varargs» вместо обработки его как единственного аргумента
  • 1..10 - это синтаксис последовательности диапазона в Ruby

Это объясняет это адекватно? Если нет, пожалуйста, уточните, какой бит сбивает с толку.

...