validation - 通过链接匹配从字符串转换时如何验证位数?
问题描述
我刚刚完成了Rust Programming Language的Programming a Guessing Game章节。我现在想为位数添加验证,但找不到令人满意的方法。
我可以通过替换来实现它
let guess: u32 = match guess.trim().parse() {
Ok(num) => num,
Err(_) => {
println!("Please type a number.");
continue;
},
};
和
let guess = guess.trim();
if guess.parse::<u32>().is_err() || guess.chars().count() > 2 {
println!("Please type a number from 1 to 100.");
continue;
}
let guess: u32 = match guess.parse() {
Ok(num) => num,
Err(_) => continue, // this will never happen
};
我更喜欢这样做的方式是通过某种方式链接匹配,但我无法弄清楚。
解决方案
你不需要链式匹配。你只需要一个不同的模式:
let guess: u32 = match guess.trim().parse() {
Ok(num @ 1...100) => num,
_ => {
println!("Please type a number within 1-99.");
continue;
},
};
这个模式的意思是“如果它是Ok
并且它有大于 0 但小于 100 的东西,返回它的内容,否则打印消息并继续。”
推荐阅读
- git - Git rebase 说明
- javascript - 词法范围只能在花括号之间创建吗?
- javascript - ReactJS 没有渲染孩子
- angular - 如何使用 getDownloadURL() (带令牌)获取完整的 url?
- excel - 如何在活动单元格公式中使用相对引用
- cordova - HTTP 请求仅适用于浏览器,不适用于真正的 Android 设备
- android - 片段覆盖整个android编辑屏幕
- excel - 在一行中查找文本,然后在该列中查找文本
- javascript - 移动端的 Highchart(触摸可缩小和放大) - LineChart
- c# - Microsoft.Reporting.WebForms 不会将报告呈现为 CSV