【Rust自學】6.4. 簡單的控制流-if let

喜歡的話別忘了點贊、收藏加關注哦,對接下來的教程有興趣的可以關注專欄。謝謝喵!(=・ω・=)

6.4.1. 什么是if let

if let語法允許將iflet組合成一種不太冗長的方式來處理與一種模式匹配的值,同時忽略其余模式

可以把if let看作是match的語法糖,也就是只針對某一種特定的模式來允許代碼。

6.4.2. if let的應用

舉個例子:v是一個u8類型的變量,判斷v是否是0,是0就打印zero

use rand::Rng;  // 使用外部庫
fn main(){  let v: u8 = rand::thread_rng().gen_range(0..=255);  // 生成隨機數println!("{}", v);  match v {  0 => println!("zero"),  _ => (),  }  
}

這里只用分辨0和非0兩種情況,在這種情況下使用if let就會更簡單:

fn main(){  let v: u8 = rand::thread_rng().gen_range(0..=255);  // 生成隨機數  println!("{}", v);  if let 0 = v {  println!("zero");  };  
}

注意:if let用的是=而不是==

小改一下上面的例子:v是一個u8類型的變量,判斷v是否是0,是0就打印zero,不是就打印not zero

use rand::Rng;  // 使用外部庫
fn main(){  let v: u8 = rand::thread_rng().gen_range(0..=255);  // 生成隨機數println!("{}", v);  match v {  0 => println!("zero"),  _ => println!("not zero"),  }  
}

這種情況下只需要給if let加上else就行:

fn main(){  let v: u8 = rand::thread_rng().gen_range(0..=255);  // 生成隨機數  println!("{}", v);  if let 0 = v {  println!("zero");  } else {println!("not zero");}
}

6.4.3. 使用if let的取舍

if let相比match有更少的代碼,更少的縮進和更少的模版代碼。但if let放棄了窮舉的可能。

所以說使用if let還是match需要根據實際需求來決定,這之間存在簡潔性與窮盡性的取舍問題

6.4.5. if let 與 if 的區別

很多初學者搞不清if letif的區別,因為好像if let能做的if也能做,但它們兩個有本質上的區別:if let是模式匹配,if是判斷語句。

if后面的條件只能是布爾類型,而if else是匹配是否符合某個具體的模式,適合從枚舉、OptionResult或其他支持模式匹配的類型中提取值。

如例:

fn main(){let x = Some(5);if let Some(value) = x {println!("Found a value: {}", value);} else {println!("No value found");}
}

if就做不到解包Option,想要實現這樣的效果就只能使用模式匹配(matchif let)。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/64259.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/64259.shtml
英文地址,請注明出處:http://en.pswp.cn/web/64259.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【Git學習】windows系統下git init后沒有看到生成的.git文件夾

[問題] git init 命令后看不到.git文件夾 [原因] 文件夾設置隱藏 [解決辦法] Win11 win10

vscode添加全局宏定義

利用vscode編輯代碼時,設置了禁用非活動區域著色后,在一些編譯腳本中配置的宏又識別不了 遇到#ifdef包住的代碼就會變暗色,想查看代碼不是很方便。如下圖: 一 解決: 在vscode中添加全局宏定義。 二 步驟&#xff1a…

【服務器主板】定制化:基于Intel至強平臺的全新解決方案

隨著數據處理需求不斷增長,服務器硬件的發展也在持續推進。在這一背景下,為用戶定制了一款全新的基于Intel至強平臺的服務器主板,旨在提供強大的計算能力、優異的內存支持以及高速存儲擴展能力。適用于需要高性能計算、大規模數據處理和高可用…

php怎么去除數點后面的0

在PHP中,我們可以使用幾種方法來去除數字小數點后的0。 方法一:使用intval函數 intval函數可以將一個數字轉化為整數,另外,它也可以去除小數點后面的0。 “php $number 123.4500; $number intval($number); echo $number; // 輸…

數字后端培訓項目Floorplan常見問題系列專題續集1

今天繼續給大家分享下數字IC后端設計實現floorplan階段常見問題系列專題。這些問題都是來自于咱們社區IC后端訓練營學員提問的問題庫。目前這部分問題庫已經積累了4年了,后面會陸續分享這方面的問題。 希望對大家的數字后端學習和工作有所幫助。 數字后端項目Floor…

【遞歸,搜索與回溯算法 綜合練習】深入理解暴搜決策樹:遞歸,搜索與回溯算法綜合小專題(二)

優美的排列 題目解析 算法原理 解法 :暴搜 決策樹 紅色剪枝:用于剪去該節點的值在對應分支中,已經被使用的情況,可以定義一個 check[ ] 紫色剪枝:perm[i] 不能夠被 i 整除,i 不能夠被 per…

Java中各種數組復制方式的效率對比

在 Java 中,數組復制是一個常見的操作,尤其是在處理動態數組(如 ArrayList)時。Java 提供了多種數組復制的方式,每種方式在性能和使用場景上都有所不同。以下是對幾種主要數組復制方式的比較,包括 System.a…

視頻會議是如何實現屏幕標注功能的?

現在主流的視頻會議軟件都有屏幕標注功能,屏幕標注功能給屏幕分享者講解分享內容時提供了極大的方便。那我們以傲瑞視頻會議(OrayMeeting)為例,來講解屏幕標注是如何實現的。 傲瑞會議的PC端(Windows、信創Linux、銀河…

Framework開發入門(一)之源碼下載

一、使用Linux操作系統的小伙伴可以跳轉到官網鏈接按提示操作 官網源碼地址:下載源代碼 | Android Open Source Project 1.創建一個空目錄來存放您的工作文件。為其指定一個您喜歡的任意名稱: mkdir WORKING_DIRECTORYcdWORKING_DIRECTORY …

改進爬山算法之四:概率爬山法(Probabilistic Hill Climbing,PHC)

概率爬山法(Probabilistic Hill Climbing,PHC)是一種局部搜索算法,它結合了隨機性和貪婪搜索的特點,是對爬山算法(Hill Climbing Algorithm)的一種變體或擴展。與傳統的爬山法不同,PHC不是總是選擇最優的鄰居作為下一步的移動,而是以一定的概率選擇最優鄰居,同時以一…

Unity中實現人物殘影效果

今天火柴人聯盟3公測了,看到一個殘影的效果,很有意思,上網查詢了一下實現方式, 實現思路: 將角色的網格復制出來,然后放置到新建的物體的MeshFilter組件上,每隔幾十毫秒在玩家的位置生成一個&a…

C#實現調用DLL 套殼讀卡程序(桌面程序開發)

背景 正常業務已經支持 讀三代卡了,前端調用醫保封裝好的服務就可以了,但是長護要讀卡,就需要去訪問萬達,他們又搞了一套讀卡的動態庫,為了能夠掉萬達的接口,就需要去想辦法調用它們提供的動態庫方法&…

自動擋有什么優勢

自動擋汽車相比手動擋汽車具有多方面的優勢,以下是對這些優勢的詳細闡述: 一、操作簡便性 無需手動換擋:自動擋汽車不需要駕駛員手動操作離合器和換擋桿,只需通過油門和剎車踏板來控制車速,大大降低了駕駛難度。這使…

菜鳥帶新鳥——基于EPlan2022的部件庫制作(3D)

設備邏輯的概念: 可在布局空間 中和其它對象上放置對象。可將其它對象放置在 3D 對象上。已放置的對象分到組件的邏輯結構中。 將此屬性的整體標識為設備邏輯。可使用不同的功能創建和編輯設備邏輯。 設備的邏輯定義 定義 / 旋轉 / 移動 / 翻轉:組…

小程序基礎 —— 07 創建小程序項目

創建小程序項目 打開微信開發者工具,左側選擇小程序,點擊 號即可新建項目: 在彈出的新頁面,填寫項目信息(后端服務選擇不使用云服務,開發模式為小程序,模板選擇為不使用模板)&…

Android Java 版本的 MSAA OpenGL ES 多重采樣

最近多次被小伙伴問到 OpenGL 多重采樣,其實前面文章里多次講過了,就是構建2個緩沖區,多重采樣緩沖區和目標解析緩沖區。 代碼流程 // Framebuffer IDs private int msaaFBO; private int msaaColorBuffer; private int msaaDepthBuffer;pr…

Markdown語法字體字號講解

學習目錄 語法詳解改變字體樣式[電腦要自帶該樣式字體]改變局部字號全局字體字號的設置使用場景及應用實例 > 快來試試吧😃 👇 👇 👈點擊該圖片即可跳轉至Markdown學習網站進行 Markdown語法字體字號講解👈點擊這里…

Spring boot處理跨域問題

Spring boot處理跨域問題 方案一方案二推薦解決方案注意 方案一 實現WebMvcConfigurer的addCorsMappings方法 Configuration public class InterceptorConfig implements WebMvcConfigurer {Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMappin…

TOTP雙因素認證(2FA)php簡單實現

TOTP身份驗證的工作原理基于時間戳和密鑰。用戶需要在設置階段將密鑰與相應的身份驗證器進行綁定。通常,用戶會在需要使用TOTP動態驗證碼的APP或網站上獲得一個密鑰,然后將該密鑰添加到TOTP驗證器工具上。驗證器會根據當前的時間戳和密鑰生成一個一次性密…

day21——web自動化測試(3)Unittest+Selenium實戰小案例

【沒有所謂的運氣🍬,只有絕對的努力?】 目錄 今日目標: 1、UnitTest框架 2、UnitTest 核心用例 2.1 TestCase 2.2 TestSuite 2.3 TestRunner 2.4 TestLoader 2.5 TestLoader 與 TestSuite的區別 2.6 Fixture 3、斷言 3.1 1230…