Come scrivere questo in coffeescript?
f = (function(){
// something
})();
Grazie per eventuali suggerimenti :)
Come scrivere questo in coffeescript?
f = (function(){
// something
})();
Grazie per eventuali suggerimenti :)
Risposte:
Anche se puoi semplicemente usare le parentesi (ad esempio (-> foo)(), puoi evitarle usando la doparola chiave:
do f = -> console.log 'this runs right away'
L'utilizzo più comune di doè l'acquisizione di variabili in un ciclo. Per esempio,
for x in [1..3]
do (x) ->
setTimeout (-> console.log x), 1
Senza il do, stamperesti solo il valore di xdopo il ciclo 3 volte.
-> console.log 'this runs right away'a f, quindi la esegue; il tuo esegue la funzione e quindi assegna il risultato a f, come nella domanda originale. (Anche se nel caso di console.log, il valore restituito è sempre undefinedcomunque.)
{f: do -> // something}
doconsente anche di passare argomenti alla funzione. Per passare 1e 2come i parametri xe y, scrivi do (x = 1, y = 2) ->. (La documentazione per questa funzione è andata persa , ma il problema in cui è stata introdotta la funzione ha alcuni esempi.)
Se vuoi "alias" gli argomenti passati alla funzione di auto invocazione in CoffeeScript, e diciamo che questo è ciò che stai cercando di ottenere:
(function ( global, doc ) {
// your code in local scope goes here
})( window, document );
Allora do (window, document) ->non te lo lascerò fare. La strada da percorrere è con i genitori quindi:
(( global, doc ) ->
# your code here
)( window, document )
do (global=window, doc=document) ->
È inoltre possibile combinare la doparola chiave con i parametri di funzione predefiniti per eseguire il seeding di "funzioni ad avvio automatico" ricorsive con un valore iniziale. Esempio:
do recursivelyPrint = (a=0) ->
console.log a
setTimeout (-> recursivelyPrint a + 1), 1000
prova ad usare
do ($ = jQuery) ->
do ->
#your stuff here
Questo creerà una chiusura autoeseguente, utile per la definizione dell'ambito.
Mi scuso, l'ho risolto:
f = (
() -> "something"
)()
doparola chiave ha alcune limitazioni che a volte rendono necessario utilizzare l'approccio in stile JS (vedi numero 960 ); doè stato aggiunto solo a causa del caso d'uso loop-with-closures.
Dovrebbe essere
f = () ->
# do something
f = do -> console.log x