11

ライブラリのドキュメント サンプル内のエラーを修正するのに苦労しています。クレートのようなファイル構造を持っています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 {
        // ...
    }

を実行するcargo testと、このエラーが表示されます

     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

この質問を見たことがありますが、これは同じファイルからモジュールをインポートすることを扱っていますが、それでもトップレベルのスコープが必要です。ただし、ここではまだトップレベルのスコープを で指定していbignum::ます。

そのため、インポートbignum::inits::Zeroはすべてのテストと例で機能しますが、ドキュメントでは機能しません。何故ですか?前に追加しようとしましself::たが、同じエラーが発生します。ドキュメントの例を次のように変更すると

extern crate bignum;

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

ただし、正常にコンパイルされます。モジュールを正しくインポートするにはどうすればよいですか?

4

2 に答える 2

14

この問題は、ドキュメント テストの次の便利な機能に起因すると思います。

rustdoc は自動的にmain()コードの周りに適切な場所にラッパーを追加します。

リンクのルールを適用すると、次のようなコードをコンパイルすることになります。

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

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

self::bignum最初のエラー メッセージが示すように、実際には として参照する必要があります。残念ながら、Rust の問題 23314のため、現在は機能しません。

于 2015-07-26T16:02:54.190 に答える