Menu
CoddyTech

is_some() 和 is_none()

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

有时,你需要检查一个 Option 是否包含值,而不实际提取该值。Rust 提供了两个方便的方法:.is_some() 和 .is_none()。

这两种方法都会返回布尔值,因此非常适合用于 if 条件:

let maybe_score = Some(85);

if maybe_score.is_some() {
    println!("We have a score!");
}

if maybe_score.is_none() {
    println!("No score available");
}

如果 Option 中包含 Some 值,.is_some() 方法会返回 true;如果包含 None,则会返回 false。.is_none() 方法的作用正好相反:对于 None,它会返回 true;对于 Some,则会返回 false。

challenge icon

挑战

简单

你会收到一个数字作为输入。如果数字为正数,就创建一个包含 Some(number) 的 Option<i32>;如果数字为零或负数,就创建一个包含 None 的 Option<i32>。使用 .is_some() 和 .is_none() 检查 Option,并打印相应的消息。

要求:

  • 读取输入并将其转换为 i32
  • 创建一个 Option<i32> 变量:
    • 如果数字为正数(大于 0),就赋值为 Some(number)
    • 如果数字为零或负数,就赋值为 None
  • 使用 .is_some() 检查 Option 是否包含值
  • 如果 .is_some() 返回 true,打印:Positive number detected
  • 使用 .is_none() 检查 Option 是否为空
  • 如果 .is_none() 返回 true,打印:No positive number

输入:

  • 一个整数(例如,42、0 或 -5)

输出:

  • 如果数字为正数:Positive number detected
  • 如果数字为零或负数:No positive number

亲手试试

use std::io;

fn main() {
    // 读取输入
    let mut input = String::new();
    io::stdin().read_line(&mut input).expect("Failed to read line");
    let number: i32 = input.trim().parse().expect("Invalid input");
    
    // TODO: 在下方编写你的代码
    // 根据数字是否为正数,创建一个 Option<i32>
    
    // 检查 Option 是否为 Some,并打印相应的消息
    
}
quiz icon自我测试

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

逻辑与流程中的所有课

自己练习: Rust 在线编译器