在Rust中使嵌套模块公开

时间:2017-05-14 09:55:39

标签: module rust rust-cargo

我开始学习Rust的项目,但我在最基本的事情上失败了,比如设置一个合适的模块结构。我的代码如下所示:

// src/theorem/math.rs
pub mod theorem {
    pub mod math {
        use std::ops::{Add, Sub};

        pub struct Point {
            x: i32,
            y: i32,
        }

        impl Add for Point {
            // Omitted...
        }
    }

    pub use math::{Point};
}

#[cfg(test)]
mod tests {
    use theorem::math::{Point};

    #[test]
    fn add_point() {
        let v1 = Point { x: 1, y: 1 };
        let v2 = Point { x: 2, y: 2 };
        assert_eq!(v1 + v1, v2);
    }
}

我尝试pub use,我尝试在所有地方写pub,无处不在,但我得到的只是消息

error[E0432]: unresolved import `math::Point`
  --> src/theorem/math.rs:28:20
   |
28 |     pub use math::{Point};
   |                    ^^^^^ no `Point` in `math`

这是一个很好的见解,但对我没有帮助。我仔细阅读了文档,但这个案例没有真实的例子,但是......一定是可能的,对吗?

我也尝试过像src/theorem/math/point.rs这样的正确目录结构,但这种结构也不起作用。

1 个答案:

答案 0 :(得分:3)

你使用什么编译器版本? Since version 1.13,错误消息如下所示:

error[E0432]: unresolved import `math::Point`
  --> <anon>:16:20
   |
16 |     pub use math::{Point};
   |                    ^^^^^ Did you mean `self::math`?

pub use self::math::{Point};实际上是您问题的解决方案!当您use路径时,此路径始终是绝对路径。这意味着它是从您的箱子的根部解释的。但是没有math模块作为根模块的直接子模块,因此错误。