0

我简化了代码以显示问题。当我使用这个 Coffeescript 片段时:

$("<div>")
.text "hi"
.appendTo "body"

我希望它像这样编译:

$("<div>").text("hi").appendTo("body")

相反,它的作用是:

$("<div>").text("hi".appendTo("body"))

我发现你可以保留括号并且它可以工作,但我想这不是你应该编写 Coffeescript 的方式。

谁能告诉我应该如何编写它以便编译为所需的输出?非常感谢你。

4

3 回答 3

4

添加括号。

就一种好的风格而言,你应该只在语法混乱时才省略它。在这种情况下,省略它们会失去您的意图。形式服从功能。您需要这里的括号来声明先例,Coffeescript 为此支持它们。

于 2012-08-22T16:36:40.560 回答
3

我发现你可以保留括号并且它可以工作,但我想这不是你应该编写 Coffeescript 的方式。

CoffeeScript 中的括号是可选的,但这并不意味着您不应该使用它们。随意使用它们!在某些情况下,例如您的情况,它们甚至是必需的。

对我来说,使用可选括号的最大好处是匿名回调和其他括号会跨越多行的情况,如下所示:

foo 'bar', (err, res) ->
  # Do stuff

对我来说,哪个优于

foo('bar', (err, res) ->
  # Do stuff
)

但即使那是你的风格,去吧!

所以,总结一下,只需写:

$("<div>")
  .text("hi")
  .appendTo("body")

编辑:甚至

$("<div>").text("hi").appendTo("body")

但是,在这种特殊情况下,您当然可以这样做:

$("<div>", text: "hi").appendTo("body")

蒂姆托迪 ;)

于 2012-08-22T16:37:29.000 回答
0

coco 和livescript(在 npm 或 github 上)都是从 coffeescript 派生的,并且更“空间敏感”,它允许您执行以下操作:

$ "<div>" .text "hi" .appendTo "body"

$("<div>")
  .text "hi"
  .appendTo "body"

两者都编译为

$("<div>").text("hi").appendTo("body");
于 2012-08-23T04:17:58.927 回答