sweet.js:转换重复标记的出现
sweet.js: transforming occurrences of a repeated token
我想定义一个可以转换的甜蜜宏
{ 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 };
。
我想定义一个可以转换的甜蜜宏
{ 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 };
。