我是Sweet.js的新手。我的第一个简单宏是以下
macro test {
rule {
$className($entityName)
} => {
function test$className()
{
console.print("$className");
console.print("$entityName");
}
}
}
test me(More)
产生
function test$className() {
console.print(me);
console.print(More);
}
但是我希望能够产生这个:
function testMe() {
console.print("me");
console.print("More");
}
但我尝试过的任何变种都没有奏效。有什么建议吗?
答案 0 :(得分:4)
您需要使用案例宏来构建所需的确切令牌:
macro test {
case {_
$className($entityName)
} => {
var classStr = unwrapSyntax(#{$className}[0]);
var entityStr = unwrapSyntax(#{$entityName}[0]);
letstx $fnName = [makeIdent("test" + classStr, #{here})];
letstx $classStr = [makeValue(classStr, #{here})];
letstx $entityStr = [makeValue(entityStr, #{here})];
return #{
function $fnName()
{
console.print($classStr);
console.print($entityStr);
}
}
}
}
test me(More)