Rust 中的包的使用,以及将包分为多个文件模块
在 main.rs 中创建一个模块
例子如下:
mod geometry {
#[derive(Debug)]
#[derive(Default)]
pub struct Box {
pub width: f64,
pub height: f64,
pub length: f64,
}
impl Box {
pub fn new(width: f64, height: f64, length: f64) -> Self {
Self {
width,
height,
length,
}
}
pub fn get_volume(&self) -> f64 {
self.width * self.height * self.length
}
}
}
fn main() {
let box1 = geometry::Box::new(23.3, 231.2, 443.4);
println!("{:?}", box1);
println!("The volume of box1 is: {:.3}", box1.get_volume());
let box2 = geometry::Box::default();
println!("{:?}", box2);
println!("The volume of box2 is: {:.3}", box2.get_volume());
}
模块的特点:
- 如果要在模块外进行访问则需要在对应函数名或结构体等前面加上
pub
关键字 - 模块的名字应该使用全小写加下划线的规范
这是第一种使用模块的方式;第二种方式下面将介绍在 src 文件夹下建一个 geometry.rs 的文件来保存模块。
在 src 下创建 geometry.rs 文件
目录结构:
zsf@xiaotupo:~/code/rust_examples/helloworld$ tree .
.
├── Cargo.lock
├── Cargo.toml
└── src
├── geometry.rs
└── main.rs
1 directory, 4 files
main.rs
我们在 main.rs
文件中用 mod geometry
来定义一个模块,这个模块就是 src
文件夹下面的同名文件 geometry.rs
, 并且该文件内部无需在次使用 mod
关键字来定义模块。
mod geometry;
fn main() {
let box1 = geometry::Box::new(23.3, 56.3, 36.5);
println!("box1: width: {}, height: {}, length: {}", box1.width, box1.height, box1.length);
println!("The volume of box1 is: {:.3}", box1.get_volume())
}
geometry.rs
该文件中的内容如下:
#[derive(Debug)]
#[derive(Default)]
pub struct Box {
pub width: f64,
pub height: f64,
pub length: f64,
}
impl Box {
pub fn new(width: f64, height: f64, length: f64) -> Self {
Self {
width,
height,
length,
}
}
pub fn get_volume(&self) -> f64 {
self.width * self.height * self.length
}
}
在 src 文件夹下简历 geometry 目录
目录结构:
zsf@xiaotupo:~/code/rust_examples/helloworld$ tree .
.
├── Cargo.lock
├── Cargo.toml
└── src
├── geometry
│ ├── box.rs
│ └── mod.rs
└── main.rs
2 directories, 5 files
main.rs 文件
mod geometry;
fn main() {
let box1 = geometry::Box::new(23.3, 56.3, 36.5);
println!("box1: width: {}, height: {}, length: {}", box1.width, box1.height, box1.length);
println!("The volume of box1 is: {:.3}", box1.get_volume())
}
mod.rs 文件
mod r#box;
pub use r#box::Box;
box.rs
#[derive(Debug)]
#[derive(Default)]
pub struct Box {
pub width: f64,
pub height: f64,
pub length: f64,
}
impl Box {
pub fn new(width: f64, height: f64, length: f64) -> Self {
Self {
width,
height,
length,
}
}
pub fn get_volume(&self) -> f64 {
self.width * self.height * self.length
}
}