Подтвердить что ты не робот

Что означает "Splats" в учебнике CoffeeScript?

Глядя на этот учебник CoffeeScript: http://jashkenas.github.com/coffee-script/

Я не совсем понимаю, для чего предназначены Splats. Что это за конструкция? Откуда он (исторически)

4b9b3361

Ответ 1

Термин "оператор splat" происходит от Ruby, где символ * (иногда называемый "splat" -see запись файла Jargon) используется для указания, что запись в списке аргументов должна "впитывать" список аргументов.

CoffeeScript очень быстро использовал значки в стиле Ruby (см. issue 16), но по предложению Дугласа Крокфорда синтаксис был изменен с *x до x... через пару недель (см. проблема 45). Тем не менее, CoffeeScript все еще ссылаются на синтаксис как на "splat" или "splat operator".

Что касается того, что они на самом деле делают, то значки разбивают объект arguments таким образом, что разделенный аргумент становится массивом всех "лишних" аргументов. Самый тривиальный пример:

(args...) ->

В этом случае args будет просто копией массива arguments. Разнесенные аргументы могут появляться либо до, после, либо между стандартными аргументами:

(first, rest...) ->
(rest..., last) ->
(first, rest..., last) ->

В первых двух случаях, если функция получает аргументы 0-1, rest будет пустым массивом. В последнем случае функция должна принимать более 2 аргументов для rest, чтобы быть непустой.

Так как JavaScript не допускает множественные подписи для функций с тем же именем (как это делают C и Java), значки являются огромной экономией времени для работы с различным количеством аргументов.

Ответ 2

если вы знаете python, args... примерно похож на *args, так как он позволяет обрабатывать параметры функции в виде списка

например:

concat = (args...) -> args.join(', ')
concat('hello', 'world') == 'hello, world'
concat('ready', 'set', 'go!') == 'ready, set, go!'

он также работает в настройках:

[first, rest...] = [1, 2, 3, 4]
first == 1
rest == [2, 3, 4]

Ответ 3

Splats - это термин для использования оператора ... для var-args (функции, которые принимают переменное количество аргументов).

Ответ 4

Я думаю, что это синтаксический сахар для объекта аргументов javascript.

Идея может возникнуть из ruby ​​оператора splat *.