我想要定义一个转换为
{ 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的值,并为每个值构建语法对象,并以某种方式将它们连接起来,但我不知道如何做到这一点。
发布于 2016-03-03 03:12:37
问题在于语法扩展程序认为您正在尝试展开$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 };。
https://stackoverflow.com/questions/35226109
复制相似问题