funzioni anonime sintassi in CoffeeScript
-
09-10-2019 - |
Domanda
Sono stato a guardare CoffeeScript e non sto a capire come si potrebbe scrivere codice come questo. Come maneggia nidificato funzioni anonime nella sua sintassi?
;(function($) {
var app = $.sammy(function() {
this.get('#/', function() {
$('#main').text('');
});
this.get('#/test', function() {
$('#main').text('Hello World');
});
});
$(function() {
app.run()
});
})(jQuery);
Soluzione
in realtà non compilarlo, ma questo dovrebbe funzionare
(($) ->
app = $.sammy ->
this.get '#/', ->
$('#main').text ''
this.get '#/test', ->
$('#main').text 'Hello World'
$(->
app.run()
)
)(jQuery);
Altri suggerimenti
La risposta di Matt è corretta, ma qui è un metodo alternativo:
In CoffeeScript 1.0 (rilasciato poche settimane dopo questa domanda è stata posta), un operatore di do
è stata introdotta che esegue la funzione che immediatamente lo segue. E 'in gran parte utilizzato per catturare le variabili in loop, in quanto
for x in arr
do (x) ->
setTimeout (-> console.log x), 50
(che passa un riferimento x
nella funzione anonima) comporta diversamente rispetto
for x in arr
setTimeout (-> console.log x), 50
In quest'ultimo caso, semplicemente uscita l'ultima voce arr
più volte, dal momento che c'è una sola x
.
In ogni caso, si deve essere consapevoli di do
come un modo di gestire una funzione anonima, senza le parentesi in più, anche se le sue capacità per quanto riguarda l'argomento-passaggio sono un po 'limitato in questo momento. Ho sollevato una proposta di ampliare le .
Al momento, l'equivalente del tuo esempio codice sarebbe
do ->
$ = jQuery
...
Se la mia proposta viene accettata, sarà possibile scrivere
do ($ = jQuery) ->
...
, invece.
Breve variante
do ($=jQuery)->
app = $.sammy ->
@get '#/', -> $("#main").text ''
@get '#/test', -> $('#main').text 'Hello world'
$ -> app.run()