我希望有一个包含多个结构的模块,每个结构都在它自己的文件中。以Math
模块为例:
Math/
Vector.rs
Matrix.rs
Complex.rs
我希望每个结构都在同一个模块中,我会在我的主文件中使用它,如下所示:
use Math::Vector;
fn main() {
// ...
}
然而,Rust的模块系统(一开始有点令人困惑)并没有提供一种显而易见的方法来做到这一点。它似乎只允许将整个模块放在一个文件中。这是非质朴的吗?如果不是,我该怎么做?
发布于 2016-02-03 00:07:37
Rusts纯粹主义者可能会说我是异端,并讨厌这个解决方案,但这个解决方案要简单得多:只需在其自己的文件中做每件事,然后在mod.rs中使用"include!“宏:
include!("math/Matrix.rs");
include!("math/Vector.rs");
include!("math/Complex.rs");
这样就不会添加嵌套模块,并避免复杂的导出和重写规则。简单,有效,不大惊小怪。
发布于 2014-03-24 09:25:08
好了,我和我的编译器斗争了一段时间,终于让它工作了(感谢BurntSushi指出了pub use
。
main.rs:
use math::Vec2;
mod math;
fn main() {
let a = Vec2{x: 10.0, y: 10.0};
let b = Vec2{x: 20.0, y: 20.0};
}
数学/mod.rs:
pub use self::vector::Vec2;
mod vector;
数学/向量.rs
use std::num::sqrt;
pub struct Vec2 {
x: f64,
y: f64
}
impl Vec2 {
pub fn len(&self) -> f64 {
sqrt(self.x * self.x + self.y * self.y)
}
// other methods...
}
可以用同样的方式添加其他结构。注意:使用0.9编译,而不是master。
发布于 2021-01-31 14:30:42
一种更生硬的导出模块的方法,这是我从Github上学到的。
mod foo {
//! inner docstring comment 1
//! inner docstring comment 2
mod a;
mod b;
pub use a::*;
pub use b::*;
}
https://stackoverflow.com/questions/22596920
复制相似问题