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 do
parola 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 x
dopo 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 undefined
comunque.)
{f: do -> // something}
do
consente anche di passare argomenti alla funzione. Per passare 1
e 2
come i parametri x
e 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 do
parola 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"
)()
do
parola 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