我正在Rust中构建一个工具,该工具能够生成虚拟时间序列数据以测试我们现有的不同系统。我正在尝试实现在项目根目录的lib.rs中声明的“ Batch”特征。但是,在我的模块中,Rust抱怨这个特性不在范围内,如何从我的模块中访问更高名称空间的声明?
这是我的项目的样子:
- main.rs
- lib.rs
- factory
- cassandra.rs
- jboss.rs
- mod.rs
- drain
- http.rs
- cqlsh.rs
- mod.rs
lib.rs包含:
pub trait Batch<T> {
fn create(&self) -> Option<T>
}
并且在cassandra.rs和jboss.rs中,我有一些要实现Batch的结构。在lib.rs中,我已经使用:
声明了两个模块pub mod drains;
pub mod factory;
这是否是正确的方法,还是我应该将cassandra.rs和jboss.rs合并到一个文件中并在其中声明特征?
默认情况下,即使其他模块是当前模块的父模块,其他模块的项目也不可见。您必须明确地use
它们。
在这种情况下,有两种方便的方法:
use crate::Batch
,如果要将此特征保留在根中;use super::Batch
,如果您希望能够将整个层次结构(带有特征及其实现)移动到其他位置。