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)
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)
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.
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 *args
da 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 *
.
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
indef 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