Menu
CoddyTech

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,因此你之后仍然可以使用它。

challenge icon

挑战

简单

你会收到两个输入。第一个输入是一个数字(以字符串形式表示),第二个输入是一个状态指示符(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
  • 使用 .is_err() 检查结果是否出错:
    • 如果为 true,则打印:Error detected

输入:

  • 第一行:一个数字(例如,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() 检查结果,并输出相应的消息
}
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

逻辑与流程中的所有课

自己练习: Rust 在线编译器