Не могу использовать зависимый ящик в тестах документации Rust
Я пытаюсь написать документы для проекта, который я пишу на Rust. Один из документов требует использования 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
Некоторые соответствующие части соответствующих файлов:
SRC /lib.rs:
extern crate regex;
pub mod tokenize;
SRC / разметить / mod.rs:
extern crate regex;
pub mod util;
(Вверху) src/tokenize/util.rs:
extern crate regex;
use regex::Regex;
Что я делаю не так с макетом моего проекта?
2 ответа
Из главы " Язык программирования Rust" по документации:
Вот полный алгоритм, используемый rustdoc для предварительной обработки примеров:
- Любой ведущий
#![foo]
атрибуты остаются нетронутыми как атрибуты ящика.- Некоторые общие разрешающие атрибуты вставлены, в том числе
unused_variables
,unused_assignments
,unused_mut
,unused_attributes
, а такжеdead_code
, Маленькие примеры часто вызывают эти недостатки.- Если пример не содержит
extern crate
, затемextern crate <mycrate>;
вставлен.- Наконец, если пример не содержит
fn main
, остальная часть текста обернута вfn main() { your_code }
Пункт № 3 актуален здесь. Когда у тебя нет extern crate
линии, ваш ящик автоматически добавляется. Как только вы добавите первый extern crate
, ящики не будут добавлены автоматически - включая ваш ящик!
Вам нужно будет добавить extern crate
линии для обоих regex
а также rusty_nltk
,
После указания на документы я решил это, завернув main
вокруг моего кода с extern crate
s:
/// 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, ®ex);
/// }
/// ```
Я решил изменить свой стиль документа, чтобы включить main
для всех примеров, но если это не ваш стиль, вы можете добавить #
перед кодом, чтобы скрыть его от документов.