Что означает "Splats"в учебнике CoffeeScript?
глядя на этот учебник CoffeeScript:http://jashkenas.github.com/coffee-script/
Я не совсем понимаю, для чего нужны брызги. Что это за конструкция? Откуда она взялась (исторически)
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
*
.