Testing 在文档测试中使用本地模块时出错
我在玩一个小箱子,用来产生2D噪音。以下是我的“lib.rs”文件的简化片段:Testing 在文档测试中使用本地模块时出错,testing,module,documentation,rust,Testing,Module,Documentation,Rust,我在玩一个小箱子,用来产生2D噪音。以下是我的“lib.rs”文件的简化片段: pub mod my_math{ 发布结构Vec2{ ... } ... } 酒吧改装噪音{ 使用num::Float; 使用std::num::Wrapping; 用我的数学::*; ///获取基于种子向量的伪随机噪波。 /// ///#示例 /// /// ``` ///使用我的数学::Vec2; /// ///设v_seed=Vec2:::新的_值(4.134,-23.141); ///let noise
pub mod my_math{
发布结构Vec2{
...
}
...
}
酒吧改装噪音{
使用num::Float;
使用std::num::Wrapping;
用我的数学::*;
///获取基于种子向量的伪随机噪波。
///
///#示例
///
/// ```
///使用我的数学::Vec2;
///
///设v_seed=Vec2:::新的_值(4.134,-23.141);
///let noise_val=获得白噪声(&v_seed);
///
///断言!(噪声值>=0.0);
///断言!(噪音值f32{
...
}
}
但是,当我运行货物测试时,我得到以下错误:
----我的杂音::获取杂音\u白色\u 0标准音----
:3:9:3:16错误:未解析的导入my_math::Vec2
。可能是缺少外部机箱my_math
:3使用我的数学::Vec2
我还在文档注释中尝试了其他形式的use
语句,包括use my_math::*;
和use self::my_math::*;
。如果我完全删除该行,那么我会得到一个未定义的错误Vec2
正确的方法是什么?您必须指定板条箱的顶级名称(我们称之为mylib): 其基本原理是,您的文档示例必须与库的客户一样可用。如果您设身处地为他们着想,他们会取回您的库(通常是通过货物,但这并不重要)然后在它们的顶级lib.rs/main.rs中放置一个
extern板条箱mylib
。然后,为了使用部分库,它们必须指定完全限定名才能使用其子库
这正是你在评论中必须做的
此外,我认为值得引用Rust book的相关部分,其中解释了一些应用于doc代码片段的小修改。其中之一是:
如果示例不包含外部板条箱
,则插入外部板条箱;
谢谢,这就解决了!
pub mod my_math {
pub struct Vec2<T> {
...
}
...
}
pub mod my_noise {
use num::Float;
use std::num::Wrapping;
use my_math::*;
/// Gets pseudo-random noise based on a seed vector.
///
/// # Examples
///
/// ```
/// use my_math::Vec2;
///
/// let v_seed = Vec2::<f32>::new_values(4.134, -23.141);
/// let noise_val = get_noise_white(&v_seed);
///
/// assert!(noise_val >= 0.0);
/// assert!(noise_val <= 1.0);
/// ```
pub fn get_noise_white(seed: &Vec2<f32>) -> f32 {
...
}
}
use mylib::my_math::Vec2;