我正在尝试按照sweet.js(https://www.sweetjs.org/doc/tutorial)上的教程进行操作,并且尝试编写一个简单的宏,该宏应使用对宏具有2个参数的扩展为'console.log(...)
# ./a.out
1 3 mno 4
3 8 jkl 4
4 2 abc 7
5 2 def 9
8 0 ghi 9
我希望宏可以扩展到
syntax HELLO = function (ctx) {
let first = ctx.next().value
let second = ctx.next().value
return
#`console.log("Hello " + ${first} + ", Hello " + ${second} + "!")`
}
// render
console.log('This line should be left alone by sjs')
HELLO ('AA', 'BB')
但是出现语法错误
console.log("Hello AA, Hello BB !")
它仅与一个参数一起使用。但是即使那样,我仍然需要在console.log内使用连接运算符,所以,
d:\projects\Node\sweet>sjs --no-babel new.macro
C:\Users\127958\AppData\Roaming\npm\node_modules\@sweet-js\cli\node_modules\@sweet-js\core\dist\load-syntax.js:64
throw new Error('replacement values for syntax template must not be null or undefined');
^
Error: replacement values for syntax template must not be null or undefined
at sanitizeReplacementValues (C:\Users\127958\AppData\Roaming\npm\node_modules\@sweet-js\cli\node_modules\@sweet-js\core\dist\load-syntax.js:64:11)
扩展为
return #`console.log("Hello " + ${first})`
但
console.log("Hello " + "AA");
,扩展为
return #`console.log("Hello ${first}")`
麻烦了。
有什么想法吗?