6

Rust で書いているプロジェクトのドキュメントを書こうとしています。ドキュメントの 1 つは、を使用する必要がありregex::Regexます。これが私が書こうとしているドキュメントです:

/// Return a list of the offsets of the tokens in `s`, as a sequence of `(start, end)`
/// tuples, by splitting the string at each successive match of `regex`.
///
/// # Examples
///
/// ```
/// use rusty_nltk::tokenize::util::regexp_span_tokenize;
/// use regex::Regex;
///
/// let s = "Good muffins cost $3.88\nin New York.  Please buy me
///         two of them.\n\nThanks.";
/// let regex = regex::Regex::new(r"\s").unwrap();
/// let spans = regexp_span_tokenize(s, regex).unwrap();
/// ```

それは私にこのエラーを与えます:

---- tokenize::util::regexp_span_tokenize_0 stdout ----
    <anon>:4:9: 4:14 error: unresolved import `regex::Regex`. Maybe a missing `extern crate regex`? [E0432]
<anon>:4     use regex::Regex;
                 ^~~~~
error: aborting due to previous error

しかし、追加するextern crate regex;と、次のエラーが発生します。

---- tokenize::util::regexp_span_tokenize_0 stdout ----
    <anon>:3:9: 3:19 error: unresolved import `rusty_nltk::tokenize::util::regexp_span_tokenize`. Maybe a missing `extern crate rusty_nltk`? [E0432]
<anon>:3     use rusty_nltk::tokenize::util::regexp_span_tokenize;
                 ^~~~~~~~~~
<anon>:4:9: 4:14 error: unresolved import `regex::Regex`. Did you mean `self::regex`? [E0432]
<anon>:4     use regex::Regex;
                 ^~~~~
error: aborting due to 2 previous errors

関連ファイルの関連部分は次のとおりです。

ソース/lib.rs:

extern crate regex;
pub mod tokenize;

ソース/トークン化/mod.rs:

extern crate regex;
pub mod util;

(上) src/tokenize/util.rs:

extern crate regex; 
use regex::Regex;

プロジェクトのレイアウトで何が間違っていますか?

4

2 に答える 2

9

The Rust Programming Language のドキュメントに関する初版の章から:

以下は、rustdoc が例を前処理するために使用する完全なアルゴリズムです。

  1. 主要な#![foo]属性は、crate 属性としてそのまま残されます。
  2. 、 、、、などunused_variables、いくつかの一般的な許可属性が挿入されます。小さな例は、これらの糸くずを引き起こすことがよくあります。unused_assignmentsunused_mutunused_attributesdead_code
  3. 例に が含まれていない場合はextern crate、 thenextern crate <mycrate>;が挿入されます。
  4. 最後に、例に が含まれていない場合fn main、残りのテキストはfn main() { your_code }

ポイント#3はここに関連しています。行がない extern crate場合、クレートは自動的に追加されます。最初の を追加するextern crateと、クレートが自動的に追加されることはありません — これにはクレートが含まれます!

extern crateとの両方に行を追加する必要がありregexますrusty_nltk

于 2015-12-19T18:46:34.787 に答える
4

ドキュメントを指摘された後main、コードをextern cratesでラップして解決しました。

/// Return a list of the offsets of the tokens in `s`, as a sequence of `(start, end)`
/// tuples, by splitting the string at each successive match of `regex`.
///
/// # Examples
///
/// To return a list of spans based on whitespaces:
///
/// ```
/// extern crate regex;
/// extern crate rusty_nltk;
/// use rusty_nltk::tokenize::util::regexp_span_tokenize;
/// use regex::Regex;
///
/// fn main() {
///   let s = "Good muffins cost $3.88\nin New York.  Please buy me
///           two of them.\n\nThanks.";
///   let regex = Regex::new(r"\s").unwrap();
///   let spans = regexp_span_tokenize(s, &regex);
/// }
/// ```

すべての例に sを含めるようにドキュメント スタイルを変更することにしましmainたが、これが自分のスタイルでない場合は、#コードの前に追加してドキュメントから非表示にすることができます。

于 2015-12-19T18:50:01.537 に答える