代码之家  ›  专栏  ›  技术社区  ›  hellow Adolfo Casari

在文档注释中使用宏变量[复制]

  •  0
  • hellow Adolfo Casari  · 技术社区  · 7 年前

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

    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'

    0 回复  |  直到 9 年前
        1
  •  13
  •   mcarton    8 年前

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

    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

    推荐文章