首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >记录用Rust宏创建的函数

记录用Rust宏创建的函数
EN

Stack Overflow用户
提问于 2016-12-28 12:11:34
回答 1查看 1.7K关注 0票数 6

我试着做

代码语言:javascript
复制
#![deny(missing_docs)]

在铁锈里。我发现,当用这样的宏创建函数时,///注释就会被忽略:

代码语言:javascript
复制
/// docs
py_module_initializer!(libx, initlibx PyInit_libx |py, m| {
    Ok(())
});

通过以下方式:

代码语言:javascript
复制
error: missing documentation for a function
113 | py_module_initializer!(libx initlibx PyInit_libx |py, m| {
    | ^

我以为宏只会在///之后添加一个函数定义。这里怎么了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-28 12:38:20

您的文档注释引用了宏调用,这在您的情况下是无用的。要记录生成的函数,必须将文档注释写入宏定义,或者更改宏以接受文档注释。让我们来看看这个:

代码语言:javascript
复制
#![deny(missing_docs)]
//! crate docs

macro_rules! gen_fn {
    ($name:ident) => {
        /// generic doc comment... not very useful
        pub fn $name() {}
    }
}

gen_fn!(a);
gen_fn!(b);

这是可行的,但这不是最好的解决方案,因为doc注释对于所有生成的函数都是相同的。如果要记录每个生成的函数,则必须更改宏:

代码语言:javascript
复制
macro_rules! gen_fn {
    ($(#[$attr:meta])* => $name:ident) => {
        $(#[$attr])*
        pub fn $name() {}
    }
}

gen_fn!{
    /// Doc comment for a
    => a
}

这是可行的,因为文档注释在内部被转换为#[doc(...)]属性。您可以找到有关该here的更多信息。

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

https://stackoverflow.com/questions/41361897

复制
相关文章

相似问题

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