网站做效果联系方式,网站建设艾金手指科杰,自己做网站推广试玩,php连接wordpress数据库喜欢的话别忘了点赞、收藏加关注哦#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵#xff01;(#xff65;ω#xff65;)
6.4.1. 什么是if let
if let语法允许将if和let组合成一种不太冗长的方式来处理与一种模式匹配的值#xff0c;同时忽略其余模式。
可以…喜欢的话别忘了点赞、收藏加关注哦对接下来的教程有兴趣的可以关注专栏。谢谢喵(ω)
6.4.1. 什么是if let
if let语法允许将if和let组合成一种不太冗长的方式来处理与一种模式匹配的值同时忽略其余模式。
可以把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 let与if的区别因为好像if let能做的if也能做但它们两个有本质上的区别if let是模式匹配if是判断语句。
if后面的条件只能是布尔类型而if else是匹配是否符合某个具体的模式适合从枚举、Option、Result或其他支持模式匹配的类型中提取值。
如例
fn main(){let x Some(5);if let Some(value) x {println!(Found a value: {}, value);} else {println!(No value found);}
}if就做不到解包Option想要实现这样的效果就只能使用模式匹配match和if let。