Термин «оператор splat» происходит от Ruby, где *
символ (иногда называемый «splat» - см. Запись в файле жаргона ) используется для обозначения того, что запись в списке аргументов должна «впитывать» список аргументов.
CoffeeScript очень рано принял splats в стиле Ruby (см. Выпуск 16 ), но по предложению Дугласа Крокфорда синтаксис был изменен с *x
на x...
пару недель спустя (см. Выпуск 45 ). Тем не менее, CoffeeScripters по-прежнему называют синтаксис оператором splat или splat.
Что касается того, что они на самом деле делают, splats разрезает arguments
объект таким образом, что аргумент splatted становится массивом всех «дополнительных» аргументов. Самый тривиальный пример:
(args...) ->
В этом случае это args
будет просто копия массива arguments
. Разделенные аргументы могут быть до, после или между стандартными аргументами:
(first, rest...) ->
(rest..., last) ->
(first, rest..., last) ->
В первых двух случаях, если функция получает 0-1 аргументов, rest
будет пустой массив. В последнем случае функция должна получить более двух аргументов, rest
чтобы быть непустой.
Поскольку JavaScript не позволяет использовать несколько подписей для функций с одним и тем же именем (как это делают C и Java), splats значительно экономят время при работе с различным количеством аргументов.
arguments
+call
: stackoverflow.com/questions/17380315/…