is_ok() 和 is_err()
本课属于 Coddy Rust 学习旅程的“逻辑与流程”单元。第 44 课,共 66 课。
有时,你需要快速检查 Result 表示成功还是失败,而不提取实际值。Rust 提供了两个便捷的方法:.is_ok() 和 .is_err()。
这两种方法都会返回布尔值,非常适合用于简单的条件检查。.is_ok() 方法会在 Result 为 Ok 时返回 true,为 Err 时返回 false。.is_err() 方法则相反:
let success: Result = Ok(42);
let failure: Result = Err("Something went wrong");
if success.is_ok() {
println!("Operation succeeded!");
}
if failure.is_err() {
println!("Operation failed!");
}当你只需要知道结果状态,而不关心其中的具体值时,这些方法特别有用。与 match 不同,它们不会消耗 Result,因此你之后仍然可以使用它。
挑战
简单你会收到两个输入。第一个输入是一个数字(以字符串形式表示),第二个输入是一个状态指示符(success 或 failure)。根据状态创建一个 Result<i32, &'static str>。如果状态是 success,则创建一个包含已解析数字的 Ok。如果状态是 failure,则创建一个包含消息 "Operation failed" 的 Err。使用 .is_ok() 和 .is_err() 检查结果状态,并打印相应的消息。
要求:
- 读取第一个输入(数字)并去除空白字符
- 将第一个输入解析为
i32 - 读取第二个输入(状态)并去除空白字符
- 创建一个
Result<i32, &'static str>变量:- 如果状态是
success,则赋值为Ok(parsed_number) - 如果状态是
failure,则赋值为Err("Operation failed")
- 如果状态是
- 使用
.is_ok()检查结果是否成功:- 如果为 true,则打印:
Success detected
- 如果为 true,则打印:
- 使用
.is_err()检查结果是否出错:- 如果为 true,则打印:
Error detected
- 如果为 true,则打印:
输入:
- 第一行:一个数字(例如,
42) - 第二行:
success或failure
输出:
- 如果状态是
success:Success detected - 如果状态是
failure:Error detected
亲手试试
use std::io;
fn main() {
// 读取第一个输入(数字)
let mut number_input = String::new();
io::stdin().read_line(&mut number_input).expect("Failed to read line");
let number_input = number_input.trim();
// 将数字解析为 i32
let parsed_number: i32 = number_input.parse().expect("Failed to parse number");
// 读取第二个输入(status)
let mut status = String::new();
io::stdin().read_line(&mut status).expect("Failed to read line");
let status = status.trim();
// TODO: 根据 status 创建一个 Result<i32, &'static str>
// 如果 status 是 "success",创建 Ok(parsed_number)
// 如果 status 是 "failure",创建 Err("Operation failed")
// TODO: 使用 .is_ok() 和 .is_err() 检查结果,并输出相应的消息
}这节课包含一个小测验。开始学习即可作答,并记录你的进度。
逻辑与流程中的所有课
7使用 Result 处理错误
什么是 Result?在 Result 中使用 matchis_ok() 和 is_err()快捷方法:unwrap 和 expect问号运算符“?”将字符串解析为数字回顾:安全的除法函数自己练习: Rust 在线编译器