Coco到LiveScript的迁移

时间:2013-06-04 13:00:37

标签: coco livescript

我正在将一个小脚本从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方式 - 不使用临时变量。)

1 个答案:

答案 0 :(得分: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})的catchee,这意味着你必须将它传递给块catch => e({ {1}}是隐含的,但您可以明确指出:e)。