Термин «оператор 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/…