news 2026/2/26 19:42:06

【Rust】分支语句详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【Rust】分支语句详解

在 Rust 中,分支语句用于根据条件执行不同的代码路径。Rust 主要提供以下几种分支结构:

1.if语句

最基本的条件分支,与大多数语言类似:

fnmain(){letnumber=7;ifnumber<5{println!("条件为真");}else{println!("条件为假");}}

多条件分支

fnmain(){letnumber=6;ifnumber%4==0{println!("能被4整除");}elseifnumber%3==0{println!("能被3整除");}else{println!("其他情况");}}

2.if表达式(在 Rust 中是表达式!)

Rust 的if可以返回值,这使得它非常强大:

fnmain(){letcondition=true;// if 作为表达式使用letnumber=ifcondition{5// 注意:没有分号}else{6// 两个分支必须返回相同类型};println!("number 的值为: {}",number);}

3.match表达式

match是 Rust 中最强大的分支语句,类似于其他语言的 switch,但功能更强大:

fnmain(){letvalue=3;matchvalue{1=>println!("一"),2=>println!("二"),3=>println!("三"),_=>println!("其他数字"),// _ 是通配符}}

match返回值的例子:

fnmain(){letnumber=2;letdescription=matchnumber{1=>"一",2=>"二",3=>"三",_=>"其他",};println!("{}",description);}

范围匹配

fnmain(){letage=25;matchage{0..=18=>println!("未成年"),19..=60=>println!("成年"),_=>println!("老年"),}}

模式匹配(解构)

enumMessage{Quit,Move{x:i32,y:i32},Write(String),}fnmain(){letmsg=Message::Move{x:10,y:20};matchmsg{Message::Quit=>println!("退出"),Message::Move{x,y}=>println!("移动到 ({}, {})",x,y),Message::Write(text)=>println!("写入: {}",text),}}

4.if let语法糖

用于处理只关心一种匹配情况时的简化写法:

fnmain(){letsome_option_value=Some(3);// 传统 match 写法matchsome_option_value{Some(3)=>println!("值是3"),_=>(),}// 使用 if let 简化ifletSome(3)=some_option_value{println!("值是3");}}

结合else

fnmain(){letsome_value:Option<i32>=None;ifletSome(x)=some_value{println!("值是: {}",x);}else{println!("没有值");}}

5.while let循环匹配

类似于if let,但在循环中使用:

fnmain(){letmutstack=Vec::new();stack.push(1);stack.push(2);stack.push(3);// 只要 pop 返回 Some,就继续循环whileletSome(top)=stack.pop(){println!("{}",top);}}

重要特点

  1. 完备性检查match必须处理所有可能情况
  2. 模式绑定:可以直接在分支中提取值
  3. 守卫条件:可以在模式后添加额外的条件检查
matchnumber{xifx<0=>println!("负数"),0=>println!("零"),xifx>0=>println!("正数"),_=>unreachable!(),// 实际上不会执行到这里}

这些分支语句使 Rust 的模式匹配功能非常强大,是 Rust 语言的核心特性之一。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/23 1:04:11

Java毕设选题推荐:基于SpringBoot的音乐分享与交流平台设计与实现基于springboot音乐翻唱与分享平台【附源码、mysql、文档、调试+代码讲解+全bao等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/2/22 21:56:39

【质普Open-AutoGLM深度解析】:揭秘国产AutoML黑科技如何重塑AI开发效率

第一章&#xff1a;质普Open-AutoGLM概述质普Open-AutoGLM是一款面向企业级自动化生成语言模型应用的开源框架&#xff0c;旨在降低大模型在垂直领域落地的技术门槛。该框架融合了自然语言理解、任务编排与智能决策能力&#xff0c;支持从数据预处理、模型微调到服务部署的全流…

作者头像 李华
网站建设 2026/2/25 1:09:39

leetcode 3074

3074: 重新分装苹果既然同一个包裹中的苹果可以分装到不同的箱子中&#xff0c;那就先把所有苹果堆在一起&#xff0c;然后一个个地装箱。为了少用箱子&#xff0c;要先装大箱子&#xff0c;再装小箱子。注&#xff1a;题目保证可以将所有苹果重新分装到箱子中。class Solution…

作者头像 李华