視頻地址
頭條地址:https://www.ixigua.com/i6765442674582356483
B站地址:https://www.bilibili.com/video/av78062009?p=1
網(wǎng)易云課堂地址:https://study.163.com/course/introduction.htm?courseId=1209596906#/courseDetail?tab=1
講解內(nèi)容
1论衍、定義
(1)包:Cargo的一個(gè)功能恒水,允許構(gòu)建、測試和分享crate饲齐。
(2)Crate:一個(gè)模塊的樹形結(jié)構(gòu)御雕,形成庫或二進(jìn)制項(xiàng)目矢沿。
(3)模塊:通過use來使用,用來控制作用域和路徑的私有性酸纲。
(4)路徑:一個(gè)命名例如結(jié)構(gòu)體捣鲸、函數(shù)或模塊等項(xiàng)的方式。
2闽坡、包和Crate
(1)crate root 是一個(gè)源文件栽惶,Rust 編譯器以它為起始點(diǎn),并構(gòu)成你的 crate 的根模塊疾嗅。
(2)包提供一系列功能的一個(gè)或多個(gè)Crate外厂。
(3)Crate root是src/main.rs或者是src/lib.rs。 說明:如果只有main.rs則說明這個(gè)包只有一個(gè)crate(main)代承,如果同時(shí)擁有main.rs和其它的lib.rs(不一定是這個(gè)名字)則說明擁有多個(gè)crate汁蝶。
(4)crate會將一個(gè)作用域的相關(guān)功能分組到一起,使得該功能可以很方便的在多個(gè)項(xiàng)目之間共享论悴。
3掖棉、使用模塊控制作用域和私有性
(1)創(chuàng)建一個(gè)lib可以通過命令cargo new --lib libname來進(jìn)行創(chuàng)建。
(2)中默認(rèn)所有項(xiàng)(函數(shù)膀估、方法幔亥、結(jié)構(gòu)體、枚舉察纯、模塊和常量)都是私有的紫谷,需要使用pub才能暴露給外部。
(3)創(chuàng)建模塊捐寥,例如:
//factory.rs
mod refrigerator { //冰箱//需要使用 pub笤昨,否則別人無法使用
fn refrigeration() {//需要使用 pub,否則別人無法使用
}
}
mod washing_machine { //需要使用 pub握恳,否則別人無法使用
fn wash() {//需要使用 pub瞒窒,否則別人無法使用
}
}
//lib.rs
pub mod factory;
//main.rs
use mylib::factory;
fn main() {
factory::refrigerator::refrigeration();
println!("Hello, world!");
}
知識點(diǎn):需要使用pub,否則無法使用乡洼。
4崇裁、使用絕對路徑和使用相對路徑
例子:
mod A {
pub mod B {
pub fn prin() {
println!("++++++");
super::ppp();//使用父路徑
}
}
pub fn ppp() {
println!("++++++ ppp");
}
}
fn main() {
use A::B::prin; //相對路徑
prin();
A::B::prin();//絕對路徑
println!("Hello, world!");
}
5、對結(jié)構(gòu)體的使用
mod modA {
#[derive(Debug)]
pub struct A {
pub number: i32,
name: String,
}
impl A {
pub fn new_a() -> A {
A {
number: 20,
name: String::from("A"),
}
}
pub fn print_a(&self) {
println!("number = {}, name = {}", self.number, self.name);
}
}
}
fn main() {
let a = modA::A::new_a();
a.print_a();
let n = a.name;//error束昵,因?yàn)閚ame是私有的
println!("Hello, world!");
}
6拔稳、使用use和as,使用*引進(jìn)所有
//使用use
use modA::A;
let a = A::new_a();
//使用as
use modA::A as myA;
let a = myA::new_a();
//使用*
use modA::*;
let a = myA::new_a();
7锹雏、使用pub use重導(dǎo)出
8巴比、外部包
在Cargo.toml下的dependencies下
(1)路徑
[dependencies]
mylib = {path = "./mylib"}
(2)github上的版本
[dependencies]
rust-crypto = "0.2"
serde = "1.0.63"
bincode = "1.2.0"
serde_derive = "1.0.27"
例子:
//! SHA3-256 示例
extern crate crypto;
//extern crate rustc_hex;
use self::crypto::digest::Digest;
use self::crypto::sha3::Sha3;
//use rustc_hex::{ToHex,FromHex};
fn main() {
// create a SHA3-256 object
let mut hasher = Sha3::sha3_256();
// write input message
hasher.input_str("hello world");
//read hash digest
let hex = hasher.result_str();
}