【问题标题】:Coco to LiveScript migrationCoco 到 LiveScript 的迁移
【发布时间】:2013-05-30 21:24:09
【问题描述】:

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

【问题讨论】:

    标签: coco livescript


    【解决方案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)。

    【讨论】:

    • +1 谢谢! (我刚刚在您的解决方案中将 in 更改为 of。)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-07
    • 1970-01-01
    • 2012-02-01
    • 2011-01-18
    • 1970-01-01
    • 2020-01-09
    • 2018-11-15
    相关资源
    最近更新 更多