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。
挑战
简单你会收到一个数字作为输入。如果数字为正数,就创建一个包含 Some(number) 的 Option<i32>;如果数字为零或负数,就创建一个包含 None 的 Option<i32>。使用 .is_some() 和 .is_none() 检查 Option,并打印相应的消息。
要求:
- 读取输入并将其转换为
i32 - 创建一个
Option<i32>变量:- 如果数字为正数(大于 0),就赋值为
Some(number) - 如果数字为零或负数,就赋值为
None
- 如果数字为正数(大于 0),就赋值为
- 使用
.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,并打印相应的消息
}这节课包含一个小测验。开始学习即可作答,并记录你的进度。
逻辑与流程中的所有课
6用 Option 处理缺失值
什么是 Option?用 match 处理 Optionis_some() 和 is_none()解包 Optionexpect 方法提供默认值:unwrap_or复习:查找一个元素自己练习: Rust 在线编译器