macros - 如何将 Rust 宏变量嵌入到文档中?

标签 macros documentation rust

我想在宏生成的文档中使用宏变量:

macro_rules! impl_foo {
    ($name:ident) => {
        /// Returns a new `$name`.
        fn myfoo() -> $name {

        }
    };
}

但是,变量不会被替换。我还尝试使用 #[doc] 属性:

macro_rules! impl_foo {
    ($name:ident) => {
        #[doc = concat!("Returns a new `", $name, "`.")]
        fn myfoo() -> $name {

        }
    };
}

这个甚至无法解析:unexpected token: 'concat'

最佳答案

这可以使用递归宏来完成:

macro_rules! impl_foo {
    ($name:ident, $sname:expr) => {
        #[doc = "Returns a new `"]
        #[doc = $sname]
        #[doc = "`."]
        pub fn myfoo() -> $name {
            42
        }
    };

    ($name:tt) => {
        impl_foo!($name, stringify!($name));
    };
}

impl_foo!(u32);


fn main() {
    println!("Hello, world!");
}

呈现为:

Example from rustdoc

关于macros - 如何将 Rust 宏变量嵌入到文档中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53578378/

相关文章:

c - 如何使用宏更改某些文本中的数字

Javadoc 模板生成器

rust - 清除和重用 Rust PathBuf 的跨平台方法是什么?

excel - 如何 VBA 选择一对工作表并将它们复制到新的 wb?

c++ - 为什么在这个宏中一个地方需要双磅而其他地方不需要?

json - 记录 JSON 文件结构的最佳实践?

arrays - 第一个数组元素是?

rust - Rust 中的 unwrap 是什么,它的用途是什么?

rust - 为什么借阅检查员认为内容的生命周期不够长?

c - C 考试评分计划