2013-01-22 3 views
1
//Trying to convert zis javascript... 
http.createServer(app).listen(app.get('port'), function(){ 
    console.log("Express server listening on port " + app.get('port')); 
}); 

//To zis coffee-script 
http.createServer(app).listen app.get('port'), (x) -> 
    console.log "Express server listening on port " + app.get 'port' 

Ma question est la suivante: Est-ce que je dois utiliser des parenthèses quand je l'offre app.get (« port ») la valeur "comme premier argument à « écouter » Si j'écris la extrait de code sans utiliser les parenthèses:Comment convertir javascript snipped à coffeescript

http.createServer(app).listen app.get'port' (x) -> 
     console.log "Express server listening on port " + app.get 'port' 

Wont la fonction de rappel est passé comme second argument app.get?

+1

Pourquoi ne pas l'essayer et voir? –

+5

Tout simplement parce que vous pouvez souvent appeler des fonctions sans parenthèses, cela ne signifie pas que vous devriez *. Lorsque vous enchaînez des appels de fonction comme celui-ci, vous devez utiliser des parenthèses pour plus de clarté, même lorsque la priorité est ce que vous voulez. –

+1

pourquoi ne pas simplement regarder le javascript généré? tu auras ta réponse. – mpm

Répondre

2

En bref, la conversion ressemble à ceci:

http.createServer(app).listen app.get('port'), -> 
    console.log "Express server listening on port #{app.get 'port'}" 

Un peu plus d'explications:

parenthèses de CoffeeScript sont en option à moins que la fonction ne prend aucun argument. Donc, si vous appelez une fonction qui prend deux arguments, les deux suivantes sont équivalentes:

Math.max(5, 12) 
Math.max 5, 12 

Comme Math.max, http.createServer(app).listen semble prendre deux arguments: un port (il semble) et une fonction de rappel.

Vous pouvez tout simplement l'écrire comme ceci, ce qui pourrait être un peu plus clair.

serverListeningCallback = -> 
    console.log "Express server listening on port #{app.get 'port'}" 

http.createServer(app).listen app.get('port'), serverListeningCallback 

je recommande la solution au sommet, mais pourrait rendre la solution ci-dessus plus clair.


PS: note CoffeeScript's string interpolation. Les éléments suivants sont équivalents dans CoffeeScript:

"My favorite number is " + Math.random() 
"My favorite number is #{Math.random}" 
Questions connexes