Sintaxis de funciones anónimas en CoffeeScript

He estado mirando CoffeeScript y no entiendo cómo escribirías un código como este. ¿Cómo maneja las funciones anónimas anidadas en su syntax?

;(function($) { var app = $.sammy(function() { this.get('#/', function() { $('#main').text(''); }); this.get('#/test', function() { $('#main').text('Hello World'); }); }); $(function() { app.run() }); })(jQuery); 

en realidad no lo compiló, pero esto debería funcionar

 (($) -> app = $.sammy -> this.get '#/', -> $('#main').text '' this.get '#/test', -> $('#main').text 'Hello World' $(-> app.run() ) )(jQuery); 

La respuesta de Matt es correcta, pero aquí hay un método alternativo:

En CoffeeScript 1.0 (publicado algunas semanas después de que se planteó esta pregunta), se introdujo un operador do que ejecuta la function que le sigue inmediatamente. Se usa principalmente para capturar variables en loops, ya que

 for x in arr do (x) -> setTimeout (-> console.log x), 50 

(que pasa una reference a x en la function anónima) se comporta de forma diferente a

 for x in arr setTimeout (-> console.log x), 50 

Este último simplemente emitirá la última input en arr repetidamente, ya que solo hay una x .

De todos modos, debe tener en count do como una forma de ejecutar una function anónima sin los paréntesis adicionales, aunque sus capacidades con respecto a la aprobación de arguments son un poco limitadas en este momento. He planteado una propuesta para ampliarlos .

Actualmente, el equivalente de su ejemplo de código sería

 do -> $ = jQuery ... 

Si mi propuesta es aceptada, será posible escribir

 do ($ = jQuery) -> ... 

en lugar.

Variante corta

 do ($=jQuery)-> app = $.sammy -> @get '#/', -> $("#main").text '' @get '#/test', -> $('#main').text 'Hello world' $ -> app.run()