sweetjs добавив: ''
Я пытаюсь написать макрос с 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
)
Любая идея?
2 ответа
Вам нужно использовать $()
вместо чистых паренов, чтобы пары ключ-значение читались как один повторяющийся шаблон.
macro basic {
rule { { $x (,) ... } } => {
{ $($x: 3) (,) ... }
}
}
Однако стоит отметить, что это не тот случай, когда вам нужен макрос. Нормальная функция могла бы сделать это довольно легко - вам просто нужно использовать символы скобки вместо фигурных скобок и строки вместо голых идентификаторов.
Хорошо, я решил по-другому, так как я не знал, как использовать: (поскольку это специальный символ, используемый для указания типа токена), я использовал переменную temp:
macro basic {
rule { { $x (,) ... } } => {
var tmp = {};
(tmp [toString $x] = undefined)(;)
...
}
}