2012-02-16 9 views
8

¿Podría alguien mostrarme cómo invocar inmediatamente una función en CoffeeScript? Estoy tratando de lograr algo similar a este literal de objeto JS.Funciones invocadas inmediatamente en CoffeeScript

WEBAPP = { 
    maxHeight : function(){ 
     /* Calc stuff n' stuff */ 
     WEBAPP.maxHeight = /* Calculated value */ 
    }(), 
    someProperty : '' 
    /* ... */   
} 

¿Es posible o cuáles son las soluciones?

Respuesta

18

Hay do:

WEBAPP = 
    maxheight: do -> 1+1 
    someProperty: '' 

que compila a

var WEBAPP; 

WEBAPP = { 
    maxheight: (function() { 
    return 1 + 1; 
    })(), 
    someProperty: '' 
}; 
+0

Si eso parece raro, '(-> 1 + 1)()' va a hacer lo mismo que 'hacer -> 1 + 1'. –

1

¿por qué no intentas algo como esto?

square = (x) -> x * x 

WEBAPP = { 
    maxHeight: square(3), 
    someProperty: '' 
} 

ACTUALIZACIÓN

Por cierto: esta es otra solución

WEBAPP = { 
    maxHeight: (() -> 
     1 + 2 
    )() 
} 
2

Para cualquier otra persona que se encuentre con esta pregunta, también puede combinar la palabra clave do con los parámetros de función predeterminados para inicializar las "funciones invocadas inmediatamente" con un valor inicial. Ejemplo:

do recursivelyPrint = (a=0) -> 
    console.log a 
    setTimeout (-> recursivelyPrint a + 1), 1000