Was bedeutet „Splats“ im CoffeeScript-Tutorial?

Lesezeit: 3 Minuten

Wenn Sie sich dieses CoffeeScript-Tutorial ansehen: http://jashkenas.github.com/coffee-script/

Ich verstehe nicht ganz, wofür die Splats sind. Was ist diese Konstruktion? Woher kommt es (historisch)

  • Und wie üblich sollte man auch wissen, wie es in Vanilla Js umgesetzt werden kann: arguments + call: stackoverflow.com/questions/17380315/…

    – Ciro Santilli Путлер Капут 六四事

    22. Oktober 2014 um 7:22 Uhr

  • Ich stelle es mir gerne als einen Parameter vor, der (wie Farbe) in ein unbestimmtes Kontinuum “bespritzt” wird

    – Arviman

    14. November 2014 um 11:48 Uhr

  • Für alle, die Python mögen: das ist deins *args in def foo(*args):.

    – bösartig

    29. März 2015 um 9:10 Uhr

  • Terminologiehinweis: ES6 hat eine ähnliche Syntax mit Präfix übernommen. In ES6 empfangen , ...args benannt Ruhe Parameter und erweitern ...args in einen Funktionsaufruf / Array / Objektliteral wird benannt Verbreitung

    – Beni Cherniavsky-Paskin

    8. August 2018 um 14:10 Uhr

Der Begriff “Splat-Operator” kommt von Ruby, wo die * Charakter (manchmal auch als „Splat“ bezeichnet – vgl den Eintrag in der Jargon-Datei) wird verwendet, um anzugeben, dass ein Eintrag in einer Argumentliste eine Liste von Argumenten “aufsaugen” soll.

CoffeeScript hat sehr früh Splats im Ruby-Stil eingeführt (siehe Ausgabe 16), aber auf Vorschlag von Douglas Crockford wurde die Syntax von geändert *x zu x... Ein paar Wochen später (vgl Ausgabe 45). Trotzdem bezeichnen CoffeeScripter die Syntax immer noch als „Splat“ oder „Splat-Operator“.

Was sie tatsächlich tun, spritzt in Scheiben arguments Objekt so, dass das Splatted-Argument zu einem Array aller “zusätzlichen” Argumente wird. Das trivialste Beispiel ist

(args...) ->

In diesem Fall, args wird einfach eine Array-Kopie von sein arguments. Splatted-Argumente können entweder vor, nach oder zwischen Standardargumenten stehen:

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

Wenn die Funktion in den ersten beiden Fällen 0-1 Argumente erhält, rest wird ein leeres Array sein. Im letzten Fall muss die Funktion mehr als 2 Argumente für erhalten rest nicht leer sein.

Da JavaScript keine mehrfachen Signaturen für Funktionen mit demselben Namen zulässt (wie es C und Java tun), sind Splats eine enorme Zeitersparnis für den Umgang mit einer unterschiedlichen Anzahl von Argumenten.

  • Ähnlich wie C# params Stichwort.

    – DasMatthäus

    27. September 2012 um 19:17 Uhr

  • Wann würde ich das jemals brauchen?

    – Jeff Scott Ward

    22. November 2013 um 17:21 Uhr

  • wenn Sie sich nicht sicher sind, wie viele Parameter Sie akzeptieren möchten.

    – gprasant

    31. Dezember 2013 um 7:58 Uhr

  • Technisch bekannt als a [variadic function] (en.wikipedia.org/wiki/Variadic_function) oder eine Funktion unbestimmter “Arität”. Die meisten Sprachen verwenden eine Art Ellipsenform, um Variablenargumente anzuzeigen.

    – Lawrence Dol

    26. März 2015 um 17:47 Uhr


  • @JeffScottWard Ein perfektes Beispiel ist console.log, es akzeptiert eine beliebige Anzahl von Argumenten. console.log('this:',variable,'should be replaced with', another_variable);

    – Rauben

    25. August 2015 um 16:31 Uhr

Wenn Sie Python kennen, args... ungefähr ähnlich wie *argsda Sie Funktionsparameter als Liste behandeln können

zum Beispiel:

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

es funktioniert auch in Zuweisungen:

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

Splats ist der Begriff für die Verwendung des ... Operator für var-args (Funktionen, die eine variable Anzahl von Argumenten annehmen).

  • Siehe auch: Pythons *args und **kwargs und der rest-Parameter von ActionScript 3.

    – Jordanien

    1. Juni 2011 um 13:19 Uhr

Ich denke, es ist ein syntaktischer Zucker für das Argumentobjekt von Javascript.

Die Idee kommt vielleicht von Ruby’s Splat-Operator *.

1227810cookie-checkWas bedeutet „Splats“ im CoffeeScript-Tutorial?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy