Rust 文档示例中未解析的导入

Rust 文档示例中未解析的导入,rust,rustdoc,Rust,Rustdoc,我很难修复库文档示例中的错误。我的文件结构类似于我的板条箱bignum . |-- Cargo.lock |-- Cargo.toml |-- examples | |-- dat | | `-- euler_13.dat | |-- debug.rs | `-- euler_13.rs |-- README.md |-- src | |-- error.rs | |-- inits.rs | `-- lib.rs 在我的示例中,我的标题看起来像 // eule

我很难修复库文档示例中的错误。我的文件结构类似于我的板条箱
bignum

.
|-- Cargo.lock
|-- Cargo.toml
|-- examples
|   |-- dat
|   |   `-- euler_13.dat
|   |-- debug.rs
|   `-- euler_13.rs
|-- README.md
|-- src
|   |-- error.rs
|   |-- inits.rs
|   `-- lib.rs
在我的示例中,我的标题看起来像

// euler_13.rs 
extern crate bignum;
use bignum::inits::Zero;

// ...
这可以编译并且工作得很好,但是现在当我在
lib.rs
的文档中编写一个示例时,我似乎无法导入
bignum::inits::Zero

//lib.rs
//...

impl BigNum {

    //...


    /// Constructs a ...
    ///
    /// # Examples
    ///
    /// ```
    /// extern crate bignum;
    /// use bignum::inits::Zero;
    ///
    /// let a = bignum::BigNum::new(Zero::zero());
    /// ```
    ///
    pub fn new(base: BigNum) -> BigNum {
        // ...
    }
当我运行
货物测试时
,我收到此错误

     Running target/debug/lib-fe3dd7a75a504b04

running 3 tests
test crate_from_u32 ... ok
test create_from_string ... ok
test adding_no_carry ... ok

test result: ok. 3 passed; 0 failed; 0 ignored; 0 measured

   Doc-tests bignum

running 1 test
test new_0 ... FAILED

failures:

---- new_0 stdout ----
    <anon>:3:9: 3:15 error: unresolved import `self::bignum::inits::Zero`. Did you mean `self::self::bignum::inits`?
<anon>:3     use self::bignum::inits::Zero;
                 ^~~~~~
error: aborting due to previous error
thread 'new_0' panicked at 'Box<Any>', /home/rustbuild/src/rust-buildbot/slave/stable-dist-rustc-linux/build/src/libsyntax/diagnostic.rs:192



failures:
    new_0

然而,它编译得很好。如何正确导入模块?

因此,产生此错误的原因归结为
extern-claiter-bignum
被文档示例隐式使用,这意味着我不需要显式地告诉示例我将使用
bignum

这是有意义的,因为在文档级别,示例显示了板条箱特定部分的功能应该如何工作,因此您将使用
bignum
。cargo会识别这一点,并为您导入
bignum
。示例应该是这样的:

//lib.rs
//...

impl BigNum {

    //...


    /// Constructs a ...
    ///
    /// # Examples
    ///
    /// ```
    /// use bignum::inits::Zero;
    ///
    /// let a = bignum::BigNum::new(Zero::zero());
    /// ```
    ///
    pub fn new(base: BigNum) -> BigNum {
        // ...
    }
}

我认为问题的根源在于:

rustdoc将自动在代码周围的正确位置添加一个
main()
包装器

如果应用链接中的规则,最终编译的代码如下:

fn main() {
   extern crate bignum;
   use bignum::inits::Zero;

   let a = bignum::BigNum::new(Zero::zero());
}

如第一条错误消息所示,您确实需要将其称为
self::bignum
。不幸的是,这目前不起作用,因为。

@Shepmaster所以虽然我认为这些是不同的问题,但另一个答案确实解决了我的问题。我想这是因为我的问题是在
#Examples
中,
extern create bignum
是隐式的,因此再次这样做会产生错误。我提交了一份关于更改此类错误的错误输出的建议。当然,我会继续这样做。脱离主题:当我建议重复时,是否可以不删除我的注释?写了一条消息却在一段时间后消失了,这是非常令人沮丧的。这就是它发生的原因。@mdup AFAIK,如果重复的建议被接受,则来自该建议的注释将自动删除。我唯一的建议是把它分成两条评论,如果你只是建议的话,不要使用关闭链接。@Shepmaster好的,下次会这样做。顺便说一句,我从来没有用过接近票(还没有足够的代表)。如果在问题不重复后恢复评论就好了。啊,这就是为什么它不起作用的原因。
fn main() {
   extern crate bignum;
   use bignum::inits::Zero;

   let a = bignum::BigNum::new(Zero::zero());
}