我有一个非常简单的 struct 和一个new()实现的 struct .

    pub struct Square {
        rank: usize,
        file: usize,
    }

    impl Square {
        /// # Examples
        /// ```
        /// Square::new(0,0); //The square A1.
        /// ```
    }

此外,我还有一些测试(这些测试确实调用了Square::new(),尽管它们不是针对该函数的测试).当我运行cargo test时,我的文档示例中的代码出现以下错误:

使用未声明的类型Square. 考虑导入此 struct .

奇怪的是,当我跑cargo buildcargo doc的时候,这个问题不会发生.

当我按照编译器的建议导入 struct 时,这个问题就消失了.然而,这似乎不是我应该做的事情,因为(我假设)示例应该尽可能简洁.看一下String::new()source code,示例文档由一行代码组成,不需要导入.不过,env::argssource code确实包括std::env的进口.

这是故意的行为吗?这是个窃听器吗?

推荐答案

这是预期的行为.Doctests是一个强大的工具,可以同时记录您的API和测试您的实现.要做到这一点,它们必须成功编译.

然而,作为文档,文档测试也需要简短和简洁.因此,如果您认为理解该示例并不需要某些代码(但仍需要有代码才能编译doctest),则可以通过在其前面添加一个#来隐藏该行:

/// # Examples
/// ```
/// # use crate::Square;
/// Square::new(0,0); //The square A1.
/// ```

Rust相关问答推荐

在actix—web中使用Redirect或NamedFile响应

如何从铁 rust 中呼唤_mm_256_mul_ph?

如何为utoipa中的可选查询参数生成OpenAPI模式?

使用pyo3::Types::PyIterator的无限内存使用量

如果成员都实现特征,是否在多态集合上实现部分重叠的特征?

在铁 rust 中传递所有权

如何将映射反序列化为具有与键匹配的字段的定制 struct 的向量?

用于判断整数块是否连续的SIMD算法.

为什么&;mut buf[0..buf.len()]会触发一个可变/不可变的borrow 错误?

tokio::sync::broadcast::Receiver 不是克隆

结果流到 Vec 的结果:如何避免多个into_iter和collect?

Rust 如何返回大类型(优化前)?

从光标位置旋转精灵

为什么要这样编译?

如何从 x86_64 Mac 构建 M1 Mac?

无法理解 Rust 对临时值的不可变和可变引用是如何被删除的

Rust 中的let是做什么的?

预期类型参数,发现不透明类型

在 Rust 中为泛型 struct 编写一次特征绑定

Cargo:如何将整个目录或文件包含在功能标志中?