日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

里rust怎么找蓝图_Rust错误处理

發布時間:2023/12/4 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 里rust怎么找蓝图_Rust错误处理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

錯誤處理是程序開發中必不可少的一個環節,在Rust中,錯誤分成兩個類別:可恢復錯誤和不可恢復錯誤。 可恢復錯誤:比如說未找到文件,Rust中用Result<T,E>來實現 不可恢復錯誤:比如數組訪問越界,Rust中用panic!實現

1.panic!

這個有感嘆號,很顯然是一個宏,我們來使用一下子。

fn main() {panic!("panic here!"); }

報錯信息:

thread 'main' panicked at 'panic here!', srcmain.rs:2:5 stack backtrace:0: backtrace::backtrace::trace_unsynchronized ... 這底下還有很多調用堆棧的信息哈,我們現在不去關心它

使用RUST_BACKTRACE=1命令來運行程序也可以調出調用堆棧信息。

2.Result

Result其實是一個枚舉類型,它的原型如下:

enum Result<T, E> {Ok(T),Err(E), }

我們通過打開文件來舉例說明:

use std::fs::File;fn main() {let f = File::open("Rust.txt");//枚舉當然需要來match一下let f = match f {Ok(file) => file,Err(error) => panic!("error: {}", error),}; }

我們的當前目錄里并沒有這個文件,預期是會出錯的。

報錯信息:

thread 'main' panicked at 'error: 系統找不到指定的文件。 (os error 2)', srcmain.rs:8:23 stack backtrace:0: backtrace::backtrace::trace_unsynchronized

emmm,我這里居然還是中文!。。。我以為是No such a file or directory.

3.簡寫形式

我們可以通過unwrap或者expect函數來簡寫程序。

use std::fs::File;fn main() { // let f = File::open("Rust.txt"); // //枚舉當然需要來match一下 // let f = match f { // Ok(file) => file, // Err(error) => panic!("error: {}", error), // };let f = File::open("Rust.txt").unwrap(); }

報錯信息:

thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: Os { code: 2, kind: NotFound, message: "系統找不到指定的文件。" }', srclibcoreresult.rs:1165:5 stack backtrace:0: backtrace::backtrace::trace_unsynchronized use std::fs::File;fn main() {let f = File::open("Rust.txt").expect("failed to open Rust.txt"); }

報錯信息:

thread 'main' panicked at 'failed to open Rust.txt: Os { code: 2, kind: NotFound, message: "系統找不到指定的文件。" }', srclibcoreresult.rs:1165:5 stack backtrace:0: backtrace::backtrace::trace_unsynchronized

4.傳播錯誤

當我們調用一個函數的時候,函數內部可能出錯,而調用方需要捕捉錯誤信息,因此可以將錯誤傳出來,這個過程就是傳播錯誤。

還是以讀取文件內容來舉例:

use std::fs::File; use std::io::Read; use std::io;fn main() {let res = read_file();match res {Ok(str) => println!("str: {}", str),Err(error) => println!("error: {}", error)}; }fn read_file() -> Result<String, io::Error> {let f = File::open("Rust.txt");let mut f = match f {Ok(file) => file,Err(error) => return Err(error)};let mut str = String::new();match f.read_to_string(&mut str) {Ok(_) => Ok(str),Err(error) => Err(error)} }

我們創建了一個Rust.txt文件,運行結果如下:

str: Rust編程之路

我們把文件刪除:

運行結果:

error: 系統找不到指定的文件。 (os error 2)

也是把錯誤信息打印出來了。

5.小問號,你是否有很多朋友?

我們可以通過“?”,來做到傳播錯誤的簡寫:

use std::fs::File; use std::io::Read; use std::io;fn main() {let res = read_file();match res {Ok(str) => println!("str: {}", str),Err(error) => println!("error: {}", error)}; }fn read_file() -> Result<String, io::Error> {let mut f = File::open("Rust.txt")?;let mut str = String::new();f.read_to_string(&mut str)?;Ok(str) }

還可以再簡單一點:

fn read_file() -> Result<String, io::Error> {let mut str = String::new();File::open("Rust.txt")?.read_to_string(&mut str)?;Ok(str) }

就很棒!

6.panic!和Result如何選擇?

在測試過程中,我們可以使用panic!,這樣調試起來比較方便。

但是在正式發布的代碼中,為了程序的健壯性和容錯率,最好不要使用panic!

個人觀點哈~

7.panic的實現機制

在Rust中,panic的實現方式有兩種:unwind和abort

unwind 方式在發生panic 的時候,會一層一層地退出函數調用枝,在此過程中,當前棧內的局部變量還可以正常析構。 abort 方式在發生panic 的時候,會直接退出整個程序。

一般來說,默認情況下,編譯器都是使用的unwind模式。

如何用戶自己制定:

rustc -C panic=unwind test.rs rustc -C panic=abort test.rs

歡迎關注公眾號:Rust編程之路

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的里rust怎么找蓝图_Rust错误处理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 麻豆黄色片 | a级片免费看 | 五月天激情小说 | 怡红院一区二区三区 | 欧美色老头 | 久久久精品一区二区 | 中文在线日本 | 欧美日韩一二三四区 | aaa久久| 精品在线观看视频 | 国产精品一区二区三区四区视频 | 欧美另类视频在线 | 青春草在线视频免费观看 | 永久免费精品影视网站 | 亚洲免费在线 | 波多野结衣在线一区二区 | 中文一二区 | 波多野结衣简介 | 日本www高清 | av 一区二区三区 | www.亚洲欧美 | 免费看裸体网站视频 | 亚洲最大成人在线 | 亚洲日本视频在线观看 | 日本精品一区在线 | 久久艹国产精品 | 亚洲18在线看污www麻豆 | 日韩一级片在线观看 | 欧美成人一区二区三区 | 国内av片| 毛片在线免费 | 97超碰在线免费观看 | 不卡中文字幕在线观看 | 精品在线视频一区二区 | 欧美成人三级精品 | 天天天天躁天天爱天天碰2018 | 亚洲情在线| 亚洲麻豆一区二区三区 | 四虎影酷 | 日本黄色免费看 | 精品爆乳一区二区三区无码av | 国产又黄又粗又长 | 欧美乱大交xxxxx潮喷 | 办公室摸腿吻胸激情视频 | 日本毛片在线看 | 91av国产在线| 中文字幕在线观看91 | 久久高清无码视频 | 久久中文在线 | 免费看成年人视频 | 一级欧美一级日韩片 | 裸体裸乳被免费看视频 | 国产情侣自拍一区 | 五月婷婷狠狠干 | 亚洲精品一级二级 | 免费在线成人 | 在线无码va中文字幕无码 | 夫妻性生活自拍 | 亚洲国产成人精品激情在线 | 欧美一区三区三区高中清蜜桃 | 艳母动漫在线播放 | 亚洲精品免费在线视频 | 四虎影| 超碰在线9 | 成人h视频 | 一区小视频 | 性久久 | 欧美成人精品网站 | 欧美一性一乱一交一视频 | 337p日本欧洲亚洲大胆精筑 | 美女让男生桶 | 丰满人妻一区二区三区免费视频棣 | 久色91 | av成人免费观看 | 国产美女精品一区二区三区 | 日韩小视频 | 国产农村乱对白刺激视频 | 日韩人体视频 | 亚洲狼人色| 在线观看中文字幕亚洲 | 四虎成人精品永久免费av九九 | 成人漫画网站 | 亚洲精品一级二级 | 少妇综合 | 人妻中文字幕一区二区三区 | 91插插插视频 | 国产一区二区三区乱码 | 亚洲黄色免费视频 | 久久嫩草精品久久久久 | 亚洲综合日韩在线 | 色网网站 | 日日骚视频 | 国产91精品一区二区麻豆亚洲 | 亚洲久视频 | 美女隐私黄www网站动漫 | 欧美日本一二三区 | 四虎黄色| 青草国产视频 | 中文字幕一区二区在线老色批影视 |