我正在尝试在宏中创建生命周期通用的函数。外面没有什么花哨的,只是一个硬编码的局部函数:
macro_rules! generate_parse_function {
($rule_name:ident, $parse_expr:tt) => {
fn $rule_name<'a>(code: &'a str) -> (Option<Ast>, &'a str) {
(Ast::$rule_name, $parse_expr)
}
};
}
但是无论我做什么,都会这样显示:fn nil< 'a>(code: & 'astr) -> (Option<Ast>, & 'astr){
(Ast::nil,"NIL")
}
'a
之前有一个空格(可能是或不是问题),并且a
和str
之间的空格已删除(这肯定是一个问题)。我在互联网上找不到任何有关此的信息,但这一定是一种常见的情况。有人知道该怎么办吗?
最佳答案
奇怪的是,这似乎是rust-analyzer
中的错误。它报告了错误的结果,但是当我手动运行cargo-expand
时,我得到了正确的结果(如@eggyal所指出的)。
关于rust - 使用rust macro_rules! : How to write lifetimes?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63332248/