My Life 时光荏苒,岁月如梭

Rust 模块与项目文件组织

2020-03-22
王世东

什么是模块

刚开始接触Rust的时候很多示例代码都是单文件的,随着学习的深入,单个文件里面的代码量越来越大。 此时就需要将单个文件拆分成多个文件。Rust里面关键字mod可以用来定义一个模块,或者载入一个模块文件。

引入文件

假定,我们拥有如下文件结构:

rustmod
├── Cargo.toml
└── src
    └── main.rs

此时,新建一个文件src/util.rs,加入如下内容:

pub fn hello_mod() {
    println!("{}", "hello mod");
}

此时,就可以在main.rs内使用mod util引入util.rs文件了:

mod util;
fn main() {
    util::hello_mod();
}

以上代码块,使用mod util;载入模块文件,同时在main函数里调用util::hello_mod()函数,需要说明的是,该函数需要使用pub 关键字进行申明。

同级目录相互访问

rustmod
├── Cargo.toml
└── src
    ├── main.rs
    ├── function.rs
    └── util.rs

比如,在编写 function.rs 内代码时,偶尔需要使用到uril.rs里面一些常用的工具函数,该如何操作呢?

// rustmod/src/function.rs
use crate::util;
fn hello_function() {
    util::hello_mod();
}

引用本地crate

假定有如下目录结构:

rustmod
├── Cargo.toml
└── src
    ├── main.rs
    ├── function.rs
    └── util.rs
xxx
├── Cargo.toml
└── src
    └── lib.rs

修改rustmod/Cargo.toml

[package]
name = "testmod"
version = "0.1.0"
authors = ["Shidong Wang <[email protected]>"]
edition = "2018"

[dependencies]
xxx = {path= "../xxx" }

此时,就可以在rustmod/src/main.rs内通过extern crate xxx;来引入xxx,修改main.rs

extern crate xxx;
use xxx::xxx_func;
fn main() {
    xxx_func();
}

参考文章


延生阅读

Share on:

评论