Что делает *:: (asterisk double colon) в Ruby?

Сегодня я прокрутил код Rails и наткнулся на этот фрагмент:

new_date(*::Date._parse(string, false).values_at(:year, :mon, :mday))

Что делает asterisk-double-colon (или splat-double-colon, если хотите) в *::Date?

Предположительно, это имеет какое-то отношение к сфере класса Date с особенностями имен, но для этого достаточно, чтобы автор включил его, а не просто использовал стандартный класс Date.

Ответ 1

Я неправильно читал код; это не оператор "*::".

Вот что происходит:

  • Найти класс Date в глобальной области (::Date)
  • вызов _parse(), чтобы получить хэш значений
  • вызов values_at, чтобы включить хэш в массив
  • используйте оператор звездочки в своей типичной функции превращения массива в несколько аргументов для вызова метода
  • вызов new_date(), передающий элементы массива для аргументов year, mon и mday.

Недостаток пространства между операторами * и :: сделал его запутанным.: -\