首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将Rust宏变量嵌入到文档中?

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

Stack Overflow用户
提问于 2017-04-12 01:56:56
回答 2查看 1K关注 0票数 10

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

代码语言:javascript
复制
macro_rules! impl_foo {
    ($name:ident) => {
        /// Returns a new `$name`.
        fn myfoo() -> $name {

        }
    };
}

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

代码语言:javascript
复制
macro_rules! impl_foo {
    ($name:ident) => {
        #[doc = concat!("Returns a new `", $name, "`.")]
        fn myfoo() -> $name {

        }
    };
}

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-04-12 02:40:52

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

代码语言:javascript
复制
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!");
}

它呈现为:

票数 18
EN

Stack Overflow用户

发布于 2021-08-14 12:13:05

虽然对于简单的示例,the answer @mcarton gave确实可以很好地工作,但对于更复杂的示例,它会稍有不同。Rustdoc似乎在不同的doc属性之间插入空格。标记处理器在大多数情况下会将它们去掉,但有时,它会将它们转换为空格。考虑这个例子:

代码语言:javascript
复制
macro_rules! impl_foo {
    ($name:ident, $sname:expr) => {
        #[doc = "You can call this as `myfoo("]
        #[doc = $sname]
        #[doc = ")`."]
        pub fn myfoo(_: $name) -> $name {
            42
        }
    };

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

impl_foo!(i32);


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

这应该会生成文档“您可以将其称为myfoo(i32)。”,但实际上,它会生成“您可以将其称为myfoo( i32 )”。(请注意额外的空格):

我不太确定我的解决方案是否适用于2017年的rustc,但在现代的rustc中,这可以通过将stringify!concat!相结合来实现

代码语言:javascript
复制
macro_rules! impl_foo {
    ($name:tt) => {
        #[doc = concat!("You can call this as `myfoo(", stringify!($name), ")`.")]
        pub fn myfoo(_: $name) -> $name {
            42
        }
    };
}

impl_foo!(i32);


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

这将生成您想要的文档(因此,没有多余的空格):

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43353077

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档