网站营销策略,2345浏览器导航页,深圳企业模板建站,莱芜网站建设自助建站优化层级
PackageCrateModulePath
Package
cargo的特性, 构建、测试、共享Crate
组成:
一个 Cargo.toml 文件, 描述了如何构建这些 Crates至少包含一个 crate最多只能包含一个 library crate可以包含任意个 binary crate cargo new demo-pro 会产生一个名为 demo-pro 的 Packa…层级
PackageCrateModulePath
Package
cargo的特性, 构建、测试、共享Crate
组成:
一个 Cargo.toml 文件, 描述了如何构建这些 Crates至少包含一个 crate最多只能包含一个 library crate可以包含任意个 binary crate cargo new demo-pro 会产生一个名为 demo-pro 的 Package
目录结构如下:
cargo 的惯例: src/main.rs 是 binary crate 的 crate root 且此crate的名称与package名一致 src/lib.rs 是 library crate 的 crate root (此文件需要自己创建) 且此crate的名称与package名一致
cargo 会把 crate root 文件交给 rustic 来构建 library 或 binary
一个package 可以有多个 binary crate
Crate
一个模块树, 可以产生一个 library 或 可执行文件 Crate 类型:
binary 二进制文件library 库文件 Crate Root:
是源代码文件rustc 从这里开始组成项目的根Module
Module
控制代码的组织、作用域、私有路径 在一个 crate 内可以将代码进行分组易于复用控制项目私有性使用 mod 关键字进行创建可以嵌套可以包含其他项的定义(struct , enum, trait, fn)
案例1:
src/lib.rs
mod front_of_house {mod hosting {fn add_to_waitlist() {}fn seat_at_table() {}}mod serving {fn take_order() {}fn serve_order() {}fn take_payment() {}}
}案例2:
src/lib.rs
pub mod front_of_house {pub mod hosting {pub fn add_to_waitlist() {}pub fn seat_at_table() {}}pub mod serving {pub fn take_order() {}pub fn serve_order() {}pub fn take_payment() {}}
}pub fn eat_at(){crate::front_of_house::hosting::add_to_waitlist();
}src/main.rs
fn eat_at2(){demo_pro::front_of_house::hosting::add_to_waitlist();
}fn main() {eat_at2();
}案例3: super
src/lib.rs
pub mod front_of_house {fn method1() {}pub mod hosting {fn method2() {}pub fn method3() {method2();super::method1();// orcrate::front_of_house::method1();}}
}案例4 use 关键字
src/lib.rs
pub mod front_of_house {fn method1() {}pub mod hosting {fn method2() {}pub fn method3() {method2();super::method1();// orcrate::front_of_house::method1();}}
}use crate::front_of_house::hosting;pub fn eat_at3(){hosting::method3();
}src/main.rs
use std::collections::HashMap;fn main() {let mut map HashMap::new();map.insert(1, 2);
}
案例5 as 关键字
src/main.rs
use std::collections::HashMap as MyMap;fn main() {let mut map MyMap::new();map.insert(1, 2);
}案例6 pub use
重新导出
案例7 将模块重新拆分为不同文件
理论:
一级拆分 (等同案例4的效果) src/lib.rs
pub mod front_of_house;use crate::front_of_house::hosting;pub fn eat_at3(){hosting::method3();
}src/front_of_house.rs
fn method1() {}pub mod hosting {fn method2() {}pub fn method3() {method2();super::method1();// orcrate::front_of_house::method1();}
}二级拆分 (等同案例2的效果) src/lib.rs
pub mod front_of_house;pub fn eat_at(){crate::front_of_house::hosting::add_to_waitlist();
}src/front_of_house.rs
pub mod hosting;pub mod serving;src/front_of_house/hosting.rs
pub fn add_to_waitlist() {}
pub fn seat_at_table() {}src/front_of_house/serving.rs
pub fn take_order() {}
pub fn serve_order() {}
pub fn take_payment() {}