Como escrever isso em coffeescript?
f = (function(){
// something
})();
Obrigado por qualquer dica :)
Como escrever isso em coffeescript?
f = (function(){
// something
})();
Obrigado por qualquer dica :)
Respostas:
Embora você possa apenas usar parênteses (por exemplo (-> foo)()
, você pode evitá-los usando a do
palavra-chave:
do f = -> console.log 'this runs right away'
O uso mais comum de do
é capturar variáveis em um loop. Por exemplo,
for x in [1..3]
do (x) ->
setTimeout (-> console.log x), 1
Sem o do
, você apenas estaria imprimindo o valor de x
após o loop 3 vezes.
-> console.log 'this runs right away'
a f
e a executa; o seu executa a função e, em seguida, atribui seu resultado a f
, como na pergunta original. (Embora no caso de console.log
, o valor de retorno é sempre de undefined
qualquer maneira.)
{f: do -> // something}
do
também permite que você passe argumentos para a função. Para passar 1
e 2
como os parâmetros x
e y
, escreva do (x = 1, y = 2) ->
. (A documentação para este recurso foi perdida , mas o problema em que o recurso foi introduzido tem alguns exemplos.)
Se você deseja criar um "alias" para os argumentos passados para a função de auto-invocação no CoffeeScript, digamos que isto é o que você está tentando alcançar:
(function ( global, doc ) {
// your code in local scope goes here
})( window, document );
Então do (window, document) ->
não vou deixar você fazer isso. O caminho a percorrer é com os parênteses:
(( global, doc ) ->
# your code here
)( window, document )
do (global=window, doc=document) ->
Você também pode combinar a do
palavra-chave com os parâmetros de função padrão para propagar "funções de autoinicialização" recursivas com um valor inicial. Exemplo:
do recursivelyPrint = (a=0) ->
console.log a
setTimeout (-> recursivelyPrint a + 1), 1000
tente usar
do ($ = jQuery) ->
do ->
#your stuff here
Isso criará um encerramento autoexecutável, útil para definição do escopo.
Desculpe, eu resolvi:
f = (
() -> "something"
)()
do
palavra-chave tem algumas limitações que às vezes tornam necessário usar a abordagem do estilo JS (consulte a edição 960 ); do
foi realmente adicionado apenas por causa do caso de uso de loop com fechamentos.
Deveria ser
f = () ->
# do something
f = do -> console.log x