注冊網(wǎng)站做推廣大澤山seo快速排名
Rust基礎(chǔ)拾遺
- 前言
- 1.錯誤處理
- 1.1 panic
- 為什么是 Result
- 2. create與模塊
- 3. 宏
- 4. 不安全代碼
- 5. 外部函數(shù)
前言
? ?通過Rust程序設(shè)計-第二版
筆記的形式對Rust相關(guān)重點(diǎn)知識
進(jìn)行匯總,讀者通讀此系列文章就可以輕松的把該語言基礎(chǔ)撿起來。
1.錯誤處理
Rust 中的兩類錯誤處理:panic 和 Result。
- 普通錯誤使用 Result 類型來處理。Result 通常用以表示由程序外部的事物引發(fā)的錯誤,比如錯誤的輸入、網(wǎng)絡(luò)中斷或權(quán)限問題。
- panic 針對的是另一種錯誤,即那種永遠(yuǎn)不應(yīng)該發(fā)生的錯誤。
1.1 panic
當(dāng)程序遇到下列問題的時候,就可以斷定程序自身存在 bug,故而會引發(fā) panic:
- 數(shù)組越界訪問;
- 整數(shù)除以 0;
- 在恰好為 Err 的 Result 上調(diào)用 .expect();
- 斷言失敗。
panic!() 是一種宏,用于處理程序中出現(xiàn)錯誤的情況。
如果panic真的發(fā)生了,那么該怎么辦呢?
Rust 為你提供了一種選擇。Rust 既可以在發(fā)生 panic 時展開調(diào)用棧,也可以中止進(jìn)程。
為什么是 Result
現(xiàn)在我們已經(jīng)足夠了解為何 Rust 會優(yōu)先選擇 Result 而非異常了。以下是此設(shè)計的幾個要點(diǎn)。
-
Rust 要求程序員在每個可能發(fā)生錯誤的地方做出某種決策,并將其記錄在代碼中。這樣做很好,否則容易因為疏忽而無法正確處理錯誤。
-
最常見的決策是讓錯誤繼續(xù)傳播,而這用單個字符 ? 就可以實現(xiàn)。因此,錯誤處理管道不會像在 C 和 Go 中那樣讓你的代碼混亂不堪,而且它還具有可見性:在瀏覽一段代碼時,你一眼就能看出錯誤是從哪里傳出來的。
-
是否可能出錯是每個函數(shù)的返回類型的一部分,因此哪些函數(shù)會失敗、哪些不會失敗非常清晰。如果你將一個函數(shù)改為可能出錯的,那么就要同時更改它的返回類型,而編譯器會讓你隨之修改該函數(shù)的各個下游使用者。
-
Rust 會檢查 Result 值是否被用過了,這樣你就不會意外地讓錯誤悄悄溜過去。
-
由于 Result 是一種與任何其他數(shù)據(jù)類型沒有本質(zhì)區(qū)別的數(shù)據(jù)類型,因此很容易將成功結(jié)果和錯誤結(jié)果存儲在同一個集合中,也很容易對“部分成功”的情況進(jìn)行模擬。