使用在项目的库根目录中声明的模块内的Rust特性

问题描述 投票:1回答:1

我正在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合并到一个文件中并在其中声明特征?

module rust traits
1个回答
0
投票

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

在这种情况下,有两种方便的方法:

  • use crate::Batch,如果要将此特征保留在根中;
  • use super::Batch,如果您希望能够将整个层次结构(带有特征及其实现)移动到其他位置。
© www.soinside.com 2019 - 2024. All rights reserved.