Module 在项目根库中声明的模块中使用锈迹特征

Module 在项目根库中声明的模块中使用锈迹特征,module,rust,traits,Module,Rust,Traits,我正在Rust中构建一个工具,它能够生成虚拟时间序列数据,用于测试我们现有的不同系统。我试图实现一个名为“Batch”的特性,该特性在项目根目录的lib.rs中声明。然而,在我的模块中,Rust抱怨这个特性不在范围内,我如何从模块中访问更高名称空间上的声明 我的项目是这样的: - main.rs - lib.rs - factory - cassandra.rs - jboss.rs - mod.rs - drain - http.rs -

我正在Rust中构建一个工具,它能够生成虚拟时间序列数据,用于测试我们现有的不同系统。我试图实现一个名为“Batch”的特性,该特性在项目根目录的lib.rs中声明。然而,在我的模块中,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合并到一个文件中,并在其中声明特性?

默认情况下,来自其他模块的项目不可见,即使此其他模块是当前模块的父模块。您必须明确地
使用它们

对于此类情况,有两种方法可以方便地执行此操作:

  • 如果您想将此特性保留在根目录中,请使用clarate::Batch
  • 如果您希望能够将整个层次结构(带有trait及其实现)移动到其他地方,请使用super::Batch

默认情况下,来自其他模块的项目不可见,即使此其他模块是当前模块的父模块。您必须明确地
使用它们

对于此类情况,有两种方法可以方便地执行此操作:

  • 如果您想将此特性保留在根目录中,请使用clarate::Batch
  • 如果您希望能够将整个层次结构(带有trait及其实现)移动到其他地方,请使用super::Batch
pub mod drains;
pub mod factory;