【跟小嘉学 Rust 编程】一、Rust 编程基础
【跟小嘉学 Rust 编程】二、Rust 包管理工具使用
【跟小嘉学 Rust 编程】三、Rust 的基本程序概念
【跟小嘉学 Rust 编程】四、理解 Rust 的所有权概念
【跟小嘉学 Rust 编程】五、使用结构体关联结构化数据
【跟小嘉学 Rust 编程】六、枚举和模式匹配
【跟小嘉学 Rust 编程】七、使用包(Packages)、单元包(Crates)和模块(Module)来管理项目
本章节主要将使用包(Packages)、单元包(Crates)和模块(Module)来管理项目。
主要教材参考 《The Rust Programming Language》
Rust 组织主要包括:
Rust 模块系统主要包含:
Crate 有两种类型
cargo new
默认创建的是 binary crate;cargo new --lib
创建 library crate;src/main. rs
)src/main.rs
:
src/lib.rs
:
Cargo 会把 crate root 文件交给 rustc
来构建 library 或 binary。
在 cargo.toml 添加依赖的包(package),会从 https://crates.io/ 网站下载依赖。
[package]
name = "flappy"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
bracket-lib = "~0.8"
vi ~/.cargo/config
[source.crates-io]
registry = "https://github.com/rust-lang/crates.io-index"
# 指定镜像tuna sjtu ustc rustcc
replace-with = 'tuna'
# 中国科学技术大学
[source.ustc]
registry = "https://mirrors.ustc.edu.cn/crates.io-index"
# registry = "git://mirrors.ustc.edu.cn/crates.io-index"
# 上海交通大学
[source.sjtu]
registry = "https://mirrors.sjtug.sjtu.edu.cn/git/crates.io-index/"
# 清华大学
[source.tuna]
registry = "https://mirrors.tuna.tsinghua.edu.cn/git/crates.io-index.git"
# rustcc社区
[source.rustcc]
registry = "git://crates.rustcc.cn/crates.io-index"
//use std::io;
//use std::io::Write;
use std::io::{self, Write};
use std::collections::*;
一般用于测试场景,将所有被测试代码引入到 tests 模块;
mod front_of _house{
mod hosting {
fn add_to_waitlist(){}
fn seat_at_table(){}
}
mod serving{
fn tabke_order(){}
fn server_order(){}
fn take_payment(){}
}
}
使用 pub 关键字 可以 使得某些条目变成公共的;
pub struct:
为了在 Rust 模块中找到某个条目,需要使用路径。路径的两种形式如下:
路径至少有一个标识符,标识符之间使用::
分隔;
mod front_of_house{
pub mod hosting {
pub fn add_to_waitlist(){}
}
}
pub fn eat_at_restaurant(){
crate::front_of_house::hosting::add_to_waitlist();
front_of_house::hosting::add_to_waitlist();
}
使用 super 关键字可以访问父级模块路径的内容
mod front_of_house{
fn test(){
}
pub mod hosting {
pub fn add_to_waitlist(){
super::test();
}
}
}
pub fn eat_at_restaurant(){
crate::front_of_house::hosting::add_to_waitlist();
front_of_house::hosting::add_to_waitlist();
}
可以使用 use 关键字将路径导入到作用域内:仍然遵守私有性规则
use std::collections::HashMap;
fn main() {
let mut map:HashMap<String, String>= HashMap::new();
map.insert(String::from("key"), String::from("value"));
}
使用 as 关键字可以为引入的模块或struct等 起一个本地的别名
use std::fmt::Result as MyResult;
使用 pub use 重新导出名称,使用 use 将路径(名称)导入到作用域内后,该名称在此作用域内是私有的。
模块定义时候,如果模块名后边是;
,而不是代码块
以上就是今天要讲的内容