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


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

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

4 111

4 ответа:

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

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

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

(args...) ->

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

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

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

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

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

например:

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

он работает и в assginments:

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

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

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

идея может прийти из Руби оператор splat *.