如何从参数创建一个字符串到sweet.js宏?例如:
let foo = macro {
rule {
$name
} => {
console.log('$name', $name);
}
}
var x = 42;
foo x
将输出:
console.log(x, x);
当我更喜欢输出时:
console.log('x', x);
所以第一个参数引用了它。
答案 0 :(得分:5)
您可以使用案例宏:
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
允许我们绑定新创建的语法对象,以便在#{}
模板中使用。