我正在尝试编写一个带有sweetjs的宏来自
{a,b,c}
到
{a:'',b:'',c:''}
基本上我想列出一个对象的属性,并创建一个具有该属性的空原型。
我写的规则是
macro basic {
rule { { $x (,) ... } } => {
{($x = 3)(,) ...}
}
}
如果我有
basic { a, b, c }
它扩展到
{a = 3,b = 3,c = 3;}
但如果我更改了= 3
中的: ''
我
意外的令牌:[...(a :),...]
(另外我不知道为什么在;
之后的扩展结束时添加c = 3
有什么想法吗?
答案 0 :(得分:1)
好的我已经以不同的方式解决了,因为我不知道如何使用:(因为它是用于指定令牌类型的特殊字符)我使用了一个临时变量:
macro basic {
rule { { $x (,) ... } } => {
var tmp = {};
(tmp [toString $x] = undefined)(;)
...
}
}
答案 1 :(得分:1)
您需要使用$()
而不是裸露的parens来将键值对读取为单个重复模式。
macro basic {
rule { { $x (,) ... } } => {
{ $($x: 3) (,) ... }
}
}
值得注意的是,这不是一个需要宏的情况。一个普通的函数可以很容易地做到这一点 - 你只需要使用parens而不是花括号和字符串而不是裸标识符。