您的位置:首页 > 游戏 > 游戏 > 网站建设教程哪家公司好_免费下载公司宣传册设计样本_搜索引擎营销的优势和劣势_百度收录入口提交

网站建设教程哪家公司好_免费下载公司宣传册设计样本_搜索引擎营销的优势和劣势_百度收录入口提交

2024/12/27 1:53:14 来源:https://blog.csdn.net/LuckyLay/article/details/144201186  浏览:    关键词:网站建设教程哪家公司好_免费下载公司宣传册设计样本_搜索引擎营销的优势和劣势_百度收录入口提交
网站建设教程哪家公司好_免费下载公司宣传册设计样本_搜索引擎营销的优势和劣势_百度收录入口提交

Rust学习笔记_07——枚举和范围
Rust学习笔记_08——String
Rust学习笔记_09——模式匹配

守卫

文章目录

    • 守卫
      • 1. 介绍
      • 2. 基本用法
      • 3. 示例
      • 4. 复杂用法
      • 5. if let
        • 5.1 基本用法
        • 5.2 示例
        • 5.3 守卫与if let的区别与联系


1. 介绍

在Rust中,守卫(guard)是match表达式中的一个特性,它允许你在模式匹配的过程中附加一个条件。这个条件是一个表达式,它必须返回一个布尔值(bool),用于进一步细化或约束某个模式何时应该被匹配。守卫通过if关键字引入,并紧跟在模式之后。

2. 基本用法

match value {pattern if condition => result,_ => default_result,
}// value 是你想要匹配的值。
// pattern 是你要匹配的模式。
// condition 是一个返回布尔值的表达式,用于进一步约束pattern。
// result 是当value匹配pattern且condition为true时要执行的代码块或返回的值。
// _ 是通配符模式,匹配所有其他情况。
// default_result 是当value不匹配任何带有守卫的模式时执行的代码块或返回的值。

3. 示例

let number = 10;match number {n if n > 5 => println!("Number is greater than five"),n if n <= 5 => println!("Number is five or less"),_ => println!("This should never be printed"),  // 这个分支实际上是不会被执行的,因为上面的两个分支已经覆盖了所有可能的情况。
}

number被匹配了两次,但每次匹配都附带了一个守卫。第一个守卫检查number是否大于5,如果是,则执行第一个代码块。第二个守卫检查number是否小于或等于5,如果是,则执行第二个代码块。由于这两个守卫已经覆盖了所有可能的整数情况,因此通配符模式_对应的代码块实际上是不会被执行的

4. 复杂用法

fn is_even(n: i32) -> bool {n % 2 == 0
}let number = 4;match number {n if is_even(n) && n > 2 => println!("Number is even and greater than two"),n if is_even(n) => println!("Number is even"),_ => println!("Number is odd"),
}

is_even函数用于检查一个数字是否是偶数。match表达式使用守卫来进一步细化匹配条件,分别处理偶数且大于2、偶数和奇数的情况。

5. if let

if let是Rust中的一个语法糖,它允许你在只关心一个特定模式的情况下,避免编写完整的match表达式。if let的语法更加简洁,易于阅读。

5.1 基本用法
if let pattern = value {// 当value匹配pattern时要执行的代码块
} else {// 可选的else分支,当value不匹配pattern时要执行的代码块
}// pattern:你要匹配的模式。
// value:你想要匹配的值。
// 代码块:当value匹配pattern时要执行的代码。
// else分支:可选的,当value不匹配pattern时要执行的代码。
5.2 示例

let some_option: Option = Some(42); if let Some(value) = some_option { println!(“Got a value: {}”, value); } else { println!(“No value found”); }

5.3 守卫与if let的区别与联系
  • 区别
    • 守卫是match表达式中的一个特性,用于在模式匹配的过程中附加额外的条件。
    • if let是一个独立的语法结构,用于在只关心一个特定模式的情况下简化代码。
    • 守卫必须返回一个布尔值,而if let则通过模式匹配来检查值。
  • 联系
    • 守卫和if let都允许你在一定条件下执行特定的代码块。
    • 在某些情况下,你可以使用match表达式和守卫来实现与if let相同的功能,但if let通常更加简洁和直观。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com