我刚刚完成了 The Rust Programming Language 的Programming a Guessing Game一章。我现在想添加数字位数的验证,但是找不到一种令人愉悦的方法。
我可以通过替换来实现
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="style.css">
<script src="script.js"></script>
</head>
<body>
<div id="main">
<p>Here's a test <a href="#" id="704e04ea-9f44-4183-af59-8b89067a7245">link</a> over here. And here's <a href="#" id="3a5306d9-17e7-4414-a192-cf27d885b658">another one</a> over here</p>
</div>
</body>
</html>
使用
let guess: u32 = match guess.trim().parse() {
Ok(num) => num,
Err(_) => {
println!("Please type a number.");
continue;
},
};
我更愿意这样做的方式是通过某种方式将比赛链接起来,但我无法弄清楚。
答案 0 :(得分:4)
您不需要链式匹配。您只需要一个不同的模式:
let guess: u32 = match guess.trim().parse() {
Ok(num @ 1...100) => num,
_ => {
println!("Please type a number within 1-99.");
continue;
},
};
此模式的意思是“如果它是Ok
,并且它的值大于0但小于100,则返回其内容,否则打印消息并继续。”
答案 1 :(得分:2)
您可以像这样链接匹配项:
let guess: u32 = match guess.trim().parse() {
Ok(num) => match guess.chars().count() {
1 | 2 => num,
_ => {
println!("Please type a number from 1 to 100.");
continue;
}
},
Err(_) => {
println!("Please type a number.");
continue;
},
};
但是,检查字符串长度并不是您真正想要的。例如,“ 00023”解析为“ 23”,但强度长度为5。
由于您可以在这种情况下访问num
,因此可以直接匹配其值!
// ...
Ok(num) => match num {
1..=100 => num,
_ => {
println!("Please type a number from 1 to 100.");
continue;
}
},
// ...