Menu
CoddyTech

用 match 处理 Option

本课属于 Coddy Rust 学习旅程的“逻辑与流程”单元。第 36 课,共 66 课。

现在你已经了解了 Option 是什么,接下来学习处理它最常见、最明确的方法:使用 match 表达式。这种方法会让你考虑两种可能的情况:有值和没有值。

match 表达式与 Option 配合得非常好,因为你可以为两个变体分别创建分支:

let maybe_name = Some("Alice".to_string());

match maybe_name {
    Some(name) => println!("Hello, {}!", name),
    None => println!("Hello, stranger!"),
}

注意,Some(name) 分支会提取 Some 变体中的值。变量 name 现在包含实际的 String,而不是 Option。这称为解构,也就是从包装器中取出内部的值。

None 分支用于处理没有值的情况,让你可以提供替代行为,例如显示默认消息或采取完全不同的操作。

challenge icon

挑战

简单

你会收到一个学生姓名作为输入。系统中可能有这个姓名,也可能没有。如果姓名不为空,就创建一个包含 Some(name) 的 Option<String>;如果姓名为空,则创建 None。使用 match 表达式处理这两种情况,并打印相应的消息。

要求:

  • 将输入读取为字符串(学生姓名)
  • 使用 .trim() 去除输入中的空白字符
  • 创建一个 Option<String> 变量:
    • 如果去除空白字符后的姓名不为空,则赋值为 Some(name.to_string())
    • 如果去除空白字符后的姓名为空,则赋值为 None
  • 使用 match 表达式处理 Option 的两种变体
  • 在 Some(name) 分支中,打印:Welcome, [name]!
  • 在 None 分支中,打印:No name provided

输入:

  • 一行内容,可以是学生姓名,也可以是空行

输出:

  • 如果提供了姓名:Welcome, [name]!
  • 如果没有提供姓名(输入为空):No name provided

亲手试试

use std::io;

fn main() {
    // 读取输入
    let mut input = String::new();
    io::stdin().read_line(&mut input).expect("Failed to read line");
    let name = input.trim();
    
    // TODO: 根据 name 是否为空,创建一个 Option<String>
    
    // TODO: 使用 match 表达式处理 Some 和 None 两种情况,并打印相应的消息
}
quiz icon自我测试

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

逻辑与流程中的所有课

自己练习: Rust 在线编译器