0
点赞
收藏
分享

微信扫一扫

Rust基础篇——代码拆分

1,Cargo包

项目是最大的分类。一个项目对应一个Cargo.toml。


创建项目的指令:

cargo new demo1

其中,demo1是项目名。效果:

Rust基础篇——代码拆分_bc

​​https://crates.io/​​上存放了很多Cargo项目,可以直接拿来使用。

我们也可以上传自己的项目。

2,crate

crate类似于文件,分类仅次于项目。


有两种crate:exe,lib。

exe有main函数,编译产物可以运行。

lib是库文件,可以被其他crate引入。

3,包和crate的关系

一个包里面:


  • lib可以有0个或者1个。
  • exe可以有任意个。
  • 至少有一个crate,无论是lib还是exe。


lib的默认名称为:lib.rs。

exe则是:main.rs。

其他exe需要放在src/bin目录下。


举例:

只有main.rs的时候。

只有一个exe文件,名称和项目名一致。

Rust基础篇——代码拆分_bc_02

多了一个lib.rs。

多了一个libdemo1.rlib。

Rust基础篇——代码拆分_main函数_03

在src/bin中新建一个a.rs。写好main方法。

多了一个exe文件,名称就是a。

Rust基础篇——代码拆分_bc_04

4,模块

模块可以进一步拆分代码。像这样:

mod a {
mod b {
mod c {}
}
mod d {
fn say() {
println!("你好,世界!");
}
}
}
fn main() {
}

外部想要访问say(),需要pub来公开。

pub mod a {
mod b {
mod c {}
}
pub mod d {
pub fn say() {
println!("你好,世界!");
}
}
}
fn main() {
a::d::say();
}

4.1绝对路径写法

三方库,以库名作为开头。

当前库,以crate开头。

pub mod a {
mod b {
mod c {}
}
pub mod d {
pub fn say() {
println!("你好,世界!");
}
}
}
mod m {
fn asd() {
crate::a::d::say();
}
}
fn main() {}

4.2相对路径写法

可以直接从当前路径开始写。

pub mod a {
pub mod d {
pub fn say() {
println!("你好,世界!");
}
}
fn c() {
d::say();
}
}
fn main() {}

super代表父模块。

pub mod a {
pub mod d {
pub fn say() {
println!("你好,世界!");
}
}
mod m {
fn c() {
super::d::say();
}
}
}
fn main() {}

5,use

use可以把某个名称引入当前位置。

pub mod a {
pub mod d {
pub fn say() {
println!("你好,世界!");
}
}
}
fn main() {
use a::d::say;
say();
}

 可以改名。

pub mod a {
pub mod d {
pub fn say() {
println!("你好,世界!");
}
}
}
fn main() {
use a::d::say as say2;
say2();
}

可以把名称也公开,让外部可以从这里use。

pub mod a {
pub mod d {
pub fn say() {
println!("你好,世界!");
}
}
pub use d::say;
}
fn main() {
a::say();
}

两句类似的use可以简写。

pub mod a {
pub mod d {
pub fn say() {
println!("你好,世界!");
}
pub fn say2() {
println!("你好,世界!");
}
}
}
fn main() {
use a::d::{say, say2};
say();
say2();
}

也可以use所有的。

pub mod a {
pub mod d {
pub fn say() {
println!("你好,世界!");
}
pub fn say2() {
println!("你好,世界!");
}
}
}
fn main() {
use a::d::*;
say();
say2();
}

6,模块的拆分

准备一个main.rs。

pub mod m {
pub fn abc() {
println!("你好,世界!")
}
}
fn main() {
m::abc();
}

想要把模块m单独放在一个地方。只需要:

1,src下新建m.rs,放下代码。

pub fn abc() {
println!("你好,世界!")
}

2,原来的地方替换成空壳。

pub mod m;
fn main() {
m::abc();
}

7,子模块的拆分

还是上面的代码,在m中套一层n。

pub mod n {
pub fn abc() {
println!("你好,世界!")
}
}

想要把模块n单独放在一个地方。只需要:

1,新建目录m,里面新建n.rs。

pub fn abc() {
println!("你好,世界!")
}

2,原来的地方替换成空壳。






举报

相关推荐

0 条评论