1

我正在将一个小脚本从 coco 迁移到 LiveScript:

D = (obj, l = 20) ->
  if (l > 0)
    new
      @[k] = (try D(v, l - 1) catch (e) e) for k, v in obj
  else
    obj

此代码在 coco 中有效,但在 LiveScript 中无法编译:

第 4 行的解析错误:意外的“FOR”

我试图通过以下方式修改该代码(对于 LiveScript):

D = (obj, l = 20) ->
  if (l > 0)
    new
      for k, v of obj
        @[k] = (try D(v, l - 1) catch (e) e)
  else
    obj

但它仍然无法编译:

第 5 行的无效分配

如何将此 coco 脚本重写为 LiveScript?(不是以纯 JavaScript 方式——不使用临时变量。)

4

1 回答 1

1

仅供参考,LiveScript 具有对象理解

D = (obj, l = 20) ->
  if l > 0
    {[k, try D(v, l - 1) catch => e] for k, v of obj}
  else
    obj

所以,答案是这catch (e) e在 LS 中无效,因为 LS 允许表达式作为解构 ( catch {msg}) 的捕获者,这意味着您必须将其传递给一个块catch => e(这e是隐式的,但您可以使其显式: catch e => e)。

于 2013-06-04T18:38:48.147 回答