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