Qu'est-ce que "Splats" signifie dans le tutoriel CoffeeScript?

En regardant ce tutoriel de CoffeeScript: http://jashkenas.github.com/coffee-script/

Je ne vois pas ce que les Splats sont pour. Quelle est cette construction? D'où vient-il (historiquement)

Le terme «opérateur splat» provient de Ruby, où le caractère * (parfois appelé «splat» – voir l'entrée Jargon File ) permet d'indiquer qu'une entrée dans une liste d'arguments devrait "imbuter" une liste d'arguments.

CoffeeScript a adopté des splats de style Ruby très tôt (voir problème 16 ), mais à la suggestion de Douglas Crockford, la syntaxe a été changée de *x à x... quelques semaines plus tard (voir le problème 45 ). Néanmoins, CoffeeScripters fait toujours référence à la syntaxe comme "splat" ou "splat operator".

Quant à ce qu'ils font réellement, les splats coupent l'objet arguments de telle sorte que l'argument splatted devienne un tableau de tous les arguments «supplémentaires». L'exemple le plus trivial est

 (args...) -> 

Dans ce cas, args sera simplement une copie de tableau des arguments . Les arguments éclatés peuvent venir soit avant, après, soit entre arguments standard:

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

Dans les deux premiers cas, si la fonction reçoit 0-1 arguments, le rest sera un tableau vide. Dans le dernier cas, la fonction doit recevoir plus de 2 arguments pour que le rest soit non vide.

Étant donné que JavaScript n'autorise pas les signatures multiples pour les fonctions avec le même nom (la manière dont C et Java le font), les splats sont un énorme gain de temps pour traiter différents nombres d'arguments.

Si vous connaissez python, args... approximativement similaire à *args , car il vous permet de traiter les paramètres de fonction en tant que liste

par exemple:

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

Il fonctionne également dans les assombrations:

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

Splats est le terme pour l'utilisation de ... opérateur pour var-args (fonctions qui prennent un nombre variable d'arguments).

Je pense que c'est un sucre syntaxique pour l'objet des arguments de javascript.

L'idée peut venir avec l' opérateur splat de ruby * .