2012-02-16 19 views
8

Czy ktoś mógłby mi pokazać, jak od razu wywołać funkcję w CoffeeScript. Próbuję osiągnąć coś podobnego do tego dosłownego obiektu JS.Natychmiast wywoływane funkcje w CoffeeScript

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

Czy to możliwe lub jakie są rozwiązania?

Odpowiedz

18

Jest do:

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

które kompiluje do

var WEBAPP; 

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

Jeśli to wydaje się dziwne, '(-> 1 + 1)()' zrobi to samo co 'do -> 1 + 1". –

1

dlaczego nie spróbujesz czegoś takiego?

square = (x) -> x * x 

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

UPDATE

BTW: to inne obejście

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

Dla każdego, kto natknie się na to pytanie, można również połączyć słowo kluczowe do z domyślnymi parametrami funkcji, aby wysyłać rekursywne "funkcje natychmiast wywoływane" z wartością początkową. Przykład:

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