在 Rust 中制作嵌套模块 public

Make nested module public in Rust

我正在开始一个学习 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 这样的正确目录结构,但这也没有用。

您使用什么版本的编译器? 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 模块作为根模块的直接子模块,因此出现错误。