整理來自Rust中文前幾章節,到
包、Crates與模塊
.已經看了第二遍,知識點還是容易忘記,整理記錄一下,方便查閱.
Rust中文
x.0;
元祖
let a: [i32; 5] = [1, 2, 3, 4, 5];
fn關鍵字
表達式
和語句 表達式用於返回值,無冒號
因爲 if 是一個表達式,我們可以在 let 語句的右側使用它
棧中的所有數據都必須佔用已知且固定的大小
已實現COPY
字符串字面值不可變性在棧上
String存在堆上,因爲大小未知
let x = 5;
let y = x;
println!("{}",x)
棧上數據沒問題,實現了copy trait
let s1 = String::from("hello");
let s2 = s1;
println!("{}",s1)
堆上數據報錯,s1被move給了s2
Rust 永遠也不會自動創建數據的 “深拷貝" clone
Drop trai和Copy trait不可同時出現
元組,當且僅當其包含的類型也都是 Copy 的時候。比如,(i32, i32) 是 Copy 的,但 (i32, String) 就不是。
我們將獲取引用作爲函數參數稱爲 借用(borrowing)
引用產生生命週期問題
iter 方法返回集合中的每一個元素,而 enumerate 包裝 iter 的結果並返回一個元組
let slice = &s[..];
字符串slice的類型聲明&str
當擁有某值的不可變引用時,就不能再獲取一個可變引用
數組slice &[i32]
字段初始化簡寫語法
..user1結構體更新語法
struct Color(i32, i32, i32);元組結構體
類單元結構體()
&self只是借用
自動引用和解引用
當使用 object.something() 調用方法時,Rust 會自動爲 object 添加 &、&mut 或 * 以便使 object 與方法簽名匹配
::關聯函數用於構造對象,.屬於結構體方法
match 一個枚舉,綁定其中的值到一個變量,接着根據其值執行代碼
if let 語法讓我們以一種不那麼冗長的方式結合 if 和 let,來處理只匹配一個模式的值而忽略其他模式的情況
可以認爲 if let 是 match 的一個語法糖
路徑(path)是一個命名例如結構體、函數或模塊等項的方式
因爲 Cargo 創建了 Cargo.toml,這意味着現在我們有了一個包。如果查看 Cargo.toml 的內容,會發現並沒有提到 src/main.rs。然而,Cargo 的約定是如果在代表包的 Cargo.toml 的同級目錄下包含 src 目錄且其中包含 main.rs 文件的話,Cargo 就知道這個包帶有一個與包同名的二進制 crate
包可以帶有多個二進制 crate,需將其文件置於 src/bin 目錄;每個文件將是一個單獨的二進制 crate。
絕對路徑(absolute path)從 crate 根開始,以 crate 名或者字面值 crate 開頭。
相對路徑(relative path)從當前模塊開始,以 self、super 或當前模塊的標識符開頭。
use self:🔉:instrument;在lib下面使用
對於結構體、枚舉和其它項,通過 use 指定項的全路徑是習慣用法
as防止同名衝突
可以結合 pub 和 use。這個技術被稱爲 “重導出”(re-exporting)
use std::io::{self, Write};合併兩個use導入