我开始学习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
这样的正确目录结构,但这种结构也不起作用。
答案 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
模块作为根模块的直接子模块,因此错误。