Menu
CoddyTech

在 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 会提取错误信息并执行第二个分支。这种模式可以确保你不会意外忽略潜在的错误。

challenge icon

挑战

简单

你会收到两个输入。第一个输入是一个数字(以字符串形式表示),第二个输入是另一个数字(以字符串形式表示)。创建一个函数,尝试用第一个数字除以第二个数字,并返回 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]"
}
quiz icon自我测试

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

逻辑与流程中的所有课

自己练习: Rust 在线编译器