代理小企业网站建设,贵阳美丽乡村建设网站,源码搭建网站流程,昆明软件开发公司有哪些文章目录 cargo调用模块创建库调用库 Rust系列#xff1a;初步⚙所有权⚙结构体和枚举类⚙函数进阶⚙泛型和特征⚙并发和线程通信
cargo
cargo是Rust的包管理工具#xff0c;兼具一些调试功能#xff0c;在认识cargo之前#xff0c;我们都是直接新建一个.rs文件#xff… 文章目录 cargo调用模块创建库调用库 Rust系列初步⚙所有权⚙结构体和枚举类⚙函数进阶⚙泛型和特征⚙并发和线程通信
cargo
cargo是Rust的包管理工具兼具一些调试功能在认识cargo之前我们都是直接新建一个.rs文件并用rustc命令来编译有了cargo则会自动创建项目文件夹示例如下
cargo new --bin hellonew用于创建一个新项目bin表示这个项目将被编译为二进制文件hello是项目名称。相应地当前路径下出现了一个hello文件夹内部结构如下
hello
├─src
│ └─main.rs
├─Cargo.toml
└─.gitignore其中Cargo.toml是配置文件内容如下。
[package]
name hello
version 0.1.0
edition 2021[dependencies]前面几行意义不大主要是申明项目名、版本号等标识但[dependencies]很重要尽管目前还未引入任何依赖。
src中的main.rs则为源代码默认的内容非常简单
fn main() {println!(Hello, world!);
}接下来进入hello文件夹然后运行cargo run即可运行项目
cd hello
cargo run
Hello, world!调用模块
如果在src文件夹中新建一个文件add.rs内容如下
pub fn add(a:i32, b:i32) - i32{ab
}其中pub即public表示这个函数可被其他文件调用。
然后修改main.rs文件内容如下
mod add;
pub use crate::add::add;
fn main() {println!({}{}{}, 3, 4, add(3,4));
}第一行表示使用名为add的模块第二行表示使用add模块中的add函数运行结果为
cargo run
347如果项目规模进一步扩大那么众多模块也需要组织即需要被存放在文件夹里。而这里又有一个问题即main.rs只能调用其他文件夹中名为mod.rs的文件。例如将上述src文件夹重新规划为如下样式则会报错。
src
├─add
│ └─add.rs // 需要把这个文件改名为mod.rs
└─main.rs而只要把add.rs改写为mod.rs那就再度正常运行了。
创建库
当工程规模变得越来越大模块化编程是唯一的出路这几乎是所有编程语言的共识Rust亦然。
在Rust中项目组织分为三个层级
Module即模块是代码的组织单元对应mod关键字Crate即包由多个模块组成对应crate关键字。package项目可用于构建、测试和分享包
而这些层级关系可通过cargo工具来进行管理下面就创建一个模块
cargo new --lib add此即创建了一个add模块当前路径下也多了一个add文件夹内有一个src子文件夹包含一个lib.rs文件默认内容如下
pub fn add(left: usize, right: usize) - usize {left right
}#[cfg(test)]
mod tests {use super::*;#[test]fn it_works() {let result add(2, 2);assert_eq!(result, 4);}
}上面的代码中关键字pub所修饰的对象可以被模块外部所调用。这个add函数是属于这个库的唯一内容。
#[cfg(test)]下面的代码是用于测试的其mod与main.rs中使用的mod作用相似。
super标识当前文件的上一级目录也可以理解为父模块use super::*表示导入父模块的所有函数。
通过cargo test可以对上述代码进行测试。
调用库
接下来准备在hello项目中引用add库中的内容为了实现这个目的首先需要修改配置文件Cargo.toml在其依赖项下方加入库的路径
[dependencies]
add { path ../add }然后修改main.rs文件如下就又可以得到347了。
extern crate add;
fn main() {println!({}{}{}, 3, 4, add::add(3,4));
}