在 Result 中使用 match
本课属于 Coddy Rust 学习旅程的“逻辑与流程”单元。第 43 课,共 66 课。
现在你已经了解了 Result 是什么,接下来让我们学习处理成功和失败情况最明确、最强大的方式:使用 match 表达式。
和 Option 一样,match 会强制你处理 Result 的两种变体。你需要为 Ok 创建一个分支来处理成功,为 Err 创建另一个分支来处理失败:
let result = divide(10, 2);
match result {
Ok(value) => println!("Division successful: {}", value),
Err(error) => println!("Division failed: {}", error),
}当 Result 为 Ok 时,match 会提取成功的值并执行第一个分支。当它为 Err 时,match 会提取错误信息并执行第二个分支。这种模式可以确保你不会意外忽略潜在的错误。
挑战
简单你会收到两个输入。第一个输入是一个数字(以字符串形式表示),第二个输入是另一个数字(以字符串形式表示)。创建一个函数,尝试用第一个数字除以第二个数字,并返回 Result<f64, &'static str>。如果第二个数字是零,则返回一条消息为 "Division by zero" 的 Err。否则,返回包含除法结果的 Ok。使用 match 表达式处理 Ok 和 Err 两种情况,并打印相应的消息。
要求:
- 读取第一个输入(被除数)并去除空白字符
- 将第一个输入解析为
f64 - 读取第二个输入(除数)并去除空白字符
- 将第二个输入解析为
f64 - 创建一个接收两个
f64参数并返回Result<f64, &'static str>的函数 - 在函数内部,检查除数是否为
0.0:- 如果是,则返回
Err("Division by zero") - 如果不是,则返回
Ok(dividend / divisor)
- 如果是,则返回
- 使用解析后的两个数字调用该函数
- 使用
match表达式处理Result - 在
Ok(value)分支中,打印:Result: [value] - 在
Err(error)分支中,打印:Error: [error]
输入:
- 第一行:表示被除数的数字(例如,
10.0) - 第二行:表示除数的数字(例如,
2.0)
输出:
- 如果除法成功:
Result: [result] - 如果除数为零:
Error: Division by zero
亲手试试
use std::io;
// TODO: 在这里创建你的 divide 函数,返回 Result<f64, &'static str>
fn main() {
// 读取第一个输入(被除数)
let mut dividend_input = String::new();
io::stdin().read_line(&mut dividend_input).expect("Failed to read line");
let dividend: f64 = dividend_input.trim().parse().expect("Invalid number");
// 读取第二个输入(除数)
let mut divisor_input = String::new();
io::stdin().read_line(&mut divisor_input).expect("Failed to read line");
let divisor: f64 = divisor_input.trim().parse().expect("Invalid number");
// TODO: 调用你的 divide 函数,并用 match 处理 Result
// 对于 Ok,打印 "Result: [value]"
// 对于 Err,打印 "Error: [error]"
}这节课包含一个小测验。开始学习即可作答,并记录你的进度。
逻辑与流程中的所有课
7使用 Result 处理错误
什么是 Result?在 Result 中使用 matchis_ok() 和 is_err()快捷方法:unwrap 和 expect问号运算符“?”将字符串解析为数字回顾:安全的除法函数自己练习: Rust 在线编译器