web-dev-qa-db-fra.com

Que signifie "Splats" dans le didacticiel CoffeeScript?

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

Je ne vois pas vraiment à quoi servent les Splats. Quelle est cette construction? D'où cela vient-il (historiquement)

112
interstar

Le terme "opérateur splat" vient de Ruby, où le * le caractère (parfois appelé "splat" - voir l'entrée du fichier de jargon ) est utilisé pour indiquer qu'une entrée dans une liste d'arguments doit "absorber" une liste d'arguments.

CoffeeScript a adopté très tôt les splats de style Ruby (voir numéro 16 ), mais à la suggestion de Douglas Crockford, la syntaxe a été modifiée de *x à x... quelques semaines plus tard (voir numéro 45 ). Néanmoins, CoffeeScripters se réfère toujours à la syntaxe comme "splat" ou "opérateur splat".

Quant à ce qu'ils font réellement, les splats coupent l'objet arguments de telle manière que l'argument splatté 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 de arguments. Les arguments dispersés peuvent venir avant, après ou entre les arguments standard:

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

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

Étant donné que JavaScript n'autorise pas plusieurs signatures pour des fonctions portant le même nom (comme le font C et Java do), les splats sont un énorme gain de temps pour traiter un nombre variable d'arguments.

197
Trevor Burnham

si vous connaissez python, args... à peu près similaire à *args, car il vous permet de traiter les paramètres de fonction comme une liste

par exemple:

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

cela fonctionne aussi en affectations:

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

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

6
Jeff Foster

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

L'idée peut venir de Ruby opérateur splat * .

3
Zifei Tong