24

我有时会编写如下代码:

try doSomething()
catch e
  handleError e

这不是漂亮干净的咖啡脚本代码应该是什么样子。

有没有办法写:

try doSomething()
catch e handleError e   #<-- will not compile

这将在我的 try/catch 语句中节省大约 33% 的代码行;)

4

2 回答 2

47

then使用以下关键字编写 try/catch 单行代码的工作方式类似于 if-then 单行代码或循环单行代码:

try doSomething()
catch e then handleError e
finally cleanUp()

如果您愿意,您甚至可以将其放在一行中:

try doSomething() catch e then handleError e finally cleanUp()
于 2013-08-25T09:39:05.797 回答
3

来自https://github.com/jashkenas/coffeescript/issues/2413的交叉发布:

FWIW,我发现你可以写

try
   compute something
catch error
    handle error 
unless error?
    handle success

这是可能的,因为 CS 将catch子句的变量放入了周围的范围内,而 JS 不会这样做。甚至有人可能会争辩说,在那个位置上,说unless error?else(这不是一个if子句)和continue(这不是一个循环)都更清楚。

坚持oneliners的人甚至可以写

try compute something catch error then handle error unless error? then handle success

这有点酷,有点不可读。

当然,finally从句必须放在之前unless

于 2017-06-18T14:56:34.830 回答