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'

我的问题是:当我提供 app.get('port') 的值作为“listen”的第一个参数时,是否必须使用括号?如果我在不使用括号的情况下编写代码段:

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

回调函数不会作为 app.get 的第二个参数传递吗?

4

1 回答 1

2

简而言之,转换如下所示:

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

多一点解释:

CoffeeScript 的括号是可选的,除非函数不带参数。因此,如果您正在调用一个带有两个参数的函数,则以下两个是等效的:

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

Like Math.max,http.createServer(app).listen似乎有两个参数:一个端口(似乎)和一个回调函数。

您可以像这样轻松地编写它,这可能会更清楚一点。

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

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

我会推荐顶部的解决方案,但以上内容可能会使解决方案更加清晰。


PS:注意CoffeeScript 的字符串插值。以下在 CoffeeScript 中是等价的:

"My favorite number is " + Math.random()
"My favorite number is #{Math.random}"
于 2013-01-23T07:43:10.240 回答