【发布时间】:2013-12-25 13:11:14
【问题描述】:
我使用 CoffeeScript 已经有一段时间了。我发现它总体上是一门很好的语言,肯定比普通的 JS 更好,但我发现我仍然对它的缩进规则感到困惑。举个例子:
Bacon.mergeAll(
@searchButton.asEventStream('click')
@searchInput.asEventStream('keyup')
.filter (e) => e.keyCode is 13
)
.map =>
@searchInput.val()
.flatMapLatest (query) =>
Bacon.fromPromise $.ajax
url: @searchURL + encodeURI query
dataType: 'jsonp'
This does what it should(代码基于this tutorial,顺便说一句)但我花了很多时间试错才把它弄好。
为什么mergeAll 和asEventStream 需要在它们的参数周围加上括号?为什么缩进不足以确定参数列表的开始和结束位置? OTOH,为什么map 和flatMapLatest 的缩进就足够了?为什么挂起方法之前的空格,例如.filter(它的缩进级别)不足以确定它绑定到什么?它似乎被完全忽略了。
是否有该语言的缩进规则的权威指南?即使是非常复杂的嵌套,我也从来没有一眼理解 Python 语法的问题,因此基于缩进的语法本身不是问题。
【问题讨论】:
-
可以使用匿名函数并不意味着必须这样做。如果你把你的函数弄出来并给它们命名,那么你可以用简单易读的东西来转换混乱的心理解析和猜测,比如
o.map(mangle_them).filter(out_the_garbage)... -
是的,我肯定会在生产代码中这样做。我只是确保我理解语法的所有细微差别,以免陷入陷阱。
标签: coffeescript nested indentation