Match是使用枚举的基本工具,类似Golang的Switch语法
Match取值後对每个条件进行比较依照顺序比较,一但匹配成功就对右侧求值,并结算Match语法
每个条件分支右侧都必须是单个表达式
例
前面三个都是无效的表达式
match browser {
Firefox => let var = 777;, // 无效的表达式
Chrome => let var = 777, // 无效的表达式
Ie => fu funct() {}, // 无效的表达式
Safari => println!("S"),
}
如果需要在右侧好几个表达式或是非表达式可以用块来包起来
例
enum Browser {
Firefox,
Chrome,
Ie,
Safari,
}
let browser = Browser::Ie;
match browser {
Browser::Firefox => {
browser = Browser::Ie;
println!("F");
},
Browser::Chrome => {
let var = 777;
println!("C")
},
Browser::Ie => println!("I"),
Browser::Safari => println!("S"),
}
处理所有可能
enum Browser {
Firefox,
Chrome,
Ie,
Safari,
}
let browser = Browser::Ie;
match browser {
Browser::Ie => println!("I"),
Browser::Safari => println!("S"),
}
// 编译时会出
patterns `Firefox` and `Chrome` not covered
因为少了Firefox和Chrome条件分支,Rust要求mtch需要显式的处理所有可能的情况
可以使用空处理
let browser = Browser::Ie;
match browser {
Browser::Firefox => {}, // 使用空处理
Browser::Chrome => {}, // 使用空处理
Browser::Ie => println!("I"),
Browser::Safari => println!("S"),
}
或是使用"_"下底线,类似Golang的Default
let browser = Browser::Ie;
match browser {
Browser::Ie => println!("I"),
Browser::Safari => println!("S"),
_ => {},
}
如果Default放在条件最上面会因为顺序关系什麽都不处理
let browser = Browser::Ie;
match browser {
_ => {}, // 永远都跑到这里
Browser::Ie => println!("I"),
Browser::Safari => println!("S"),
}
match除了对枚举之外也可以对一般型别
match "value" {
"value" => println!("value"),
_ => println!("other"),
}
match 1 {
1 => println!("one"),
2 => println!("two"),
3 => println!("three"),
_ => println!("other"),
}
因为型别不像枚举有可穷举出所有,所以一定需要"_"(Default) 条件,不然编译会出现错误
>>: [DAY14]Label进阶使用-Affinity and anti-affinity
终於~ 来到铁人赛的最後一天啦 今天的工作就是把小专题剩下的功能给完成,为这次的铁人赛欢呼~ 完赛啦...
辛苦写到这里,一套完整的 Obsidian 笔记系统已经建构完成,接下来我使用下方的流程图帮大家做个...
背景 曾任职被动元件厂的品保工程师,鉴於以往资料分析无法满足庞杂的资料与客户端需求,希望培养资料洞察...
前言 我们花了将近一周的时间来介绍部署深度学习模型背後的概念,我想大家应该很想知道究竟该怎麽实作,所...
● 这章将以模拟帐户来示范如何取得指数(Index)资讯 回顾上一章,我们学会如何用Contract...