Преобразуйте аргумент sweet.js в строку
Как бы вы создали строку из аргумента в макросе sweet.js? Например:
let foo = macro {
rule {
$name
} => {
console.log('$name', $name);
}
}
var x = 42;
foo x
Будет выводить:
console.log(x, x);
Когда я предпочитаю вывод:
console.log('x', x);
Таким образом, первый аргумент имеет кавычки вокруг него.
1 ответ
Решение
Вы можете использовать кейс-макрос:
let foo = macro {
case {_
$name
} => {
letstx $name_str = [makeValue(unwrapSyntax(#{$name}), #{here})];
return #{
console.log($name_str, $name);
}
}
}
var x = 42;
foo x
Основная идея заключается в том, что вы создаете новый строковый токен (через makeValue
) используя строковое значение идентификаторов, сопоставленных $name
(unwrapSyntax
дает нам значение заданных объектов синтаксиса, в случае идентификаторов это строка идентификатора). затем letstx
позволяет нам связать наш недавно созданный объект синтаксиса для использования внутри #{}
шаблон.