甜蜜.js:转换重复令牌的出现次数

  • 本文关键字:令牌 js 转换 甜蜜 sweet.js
  • 更新时间 :
  • 英文 :


我想定义一个转换的甜蜜宏

{ a, b } # o

{ o.a, o.b }

我目前的尝试是

macro (#) {  
  case infix { { $prop:ident (,) ... } | _ $o } => {
    return #{ { $prop: $o.$prop (,) ... } }
  }
}

但是,这给了我

SyntaxError: [patterns] Ellipses level does not match in the template

怀疑我并不真正了解...是如何工作的,并且可能需要以某种方式循环$prop的值并为每个对象构建语法对象并以某种方式连接它们,但我不知道如何做到这一点。

问题是语法扩展器认为您正在尝试扩展$o.$prop而不是$prop: $o.$prop。这是解决方案:

macro (#) {  
  rule infix { { $prop:ident (,) ... } | $o:ident } => {
    { $($prop: $o.$prop) (,) ... }
  }
}

请注意,我将代码单元放在其自身的$()块中,以消除椭圆扩展的歧义。

示例:var x = { a, b } # o;变为var x = { a: o.a, b: o.b };

相关内容

最新更新