rust - 使用rust macro_rules! : How to write lifetimes?

标签 rust macros

我正在尝试在宏中创建生命周期通用的函数。外面没有什么花哨的,只是一个硬编码的局部函数:

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之前有一个空格(可能是或不是问题),并且astr之间的空格已删除(这肯定是一个问题)。我在互联网上找不到任何有关此的信息,但这一定是一种常见的情况。有人知道该怎么办吗?

最佳答案

奇怪的是,这似乎是rust-analyzer中的错误。它报告了错误的结果,但是当我手动运行cargo-expand时,我得到了正确的结果(如@eggyal所指出的)。

关于rust - 使用rust macro_rules! : How to write lifetimes?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63332248/

相关文章:

c - 使用宏进行配置

iterator - 如何在切片上返回迭代器?

rust - 如何声明一个比其封闭 block 生命周期更长的闭包

compiler-construction - 在 Rust 中,Option 被编译成运行时检查还是指令跳转?

c# - 在 Visual Studio 中运行宏直到文件末尾

rust - 如何创建include_str的错误版本?

rust - 标准是否定义了 Result<T, dyn std::error::Error> 的别名?

rust - 如何正确使用特征对象,可变迭代可变特征对象容器,同时改变容器本身?

C 预处理器宏定义的优先级

mysql - 每条街道的 LibreOffice Calc 电子表格 : Find highest house number, 并仅显示这些行