我似乎无法获得匹配
let function = macro {
case infix {$name:ident $[=] | _ ($params ...) { $body ...} } => {
return #{
$name = function $name ($params ...) {
console.log($name.name);
$body ...
}
}
}
}
var add = function (x, y){
return x+y;
}
SyntaxError: [macro] Macro `function` could not be matched with `() {} ...`
11: var add = function (x, y){
^
宏没有var就可以正常工作。
我知道表达式位置允许使用1个非expr术语
但var $name:ident $[=]
无效。
如果使用infix这是不可能的,那么还有另一种匹配函数语句并捕获函数名称的方法吗?
答案 0 :(得分:1)
我似乎需要从更广泛的范围内看待我的问题。正如@timdisney在上面解释的那样,
var xxx = function () {}
需要 var 宏,而不是功能宏。
// log function calls
let var = macro {
case {
$_ $id = function ($params ...) {$body ...}
} => {
return #{
var $id = function $id ($params ...) {
console.log($id.name);
$body ...
}
};
}
case { $_ } => { return #{var}; }
};
第二种情况是一种全能的方法,它可以使函数保持不变。它被称为身份规则。
答案 1 :(得分:0)
中缀和var
的互动很特别。出于卫生原因,中缀宏只能在var初始值设定项中看到=
。我一直在考虑如何缓解这种限制,但没有具体的内容。
虽然您可以制作一个var
宏来完成您想要的任务,但是为了解决您的问题。