在 Rust 编程中,Option<T> 和 Result<T, E> 这两种枚举类型各自承担什么职责?请给出它们的使用场景和具体用法。
考察说明
考查对 Rust 基础类型 Option 和 Result 的理解及错误处理能力。
回答思路
- 【回答框架 1】Option<T> 表示可能存在或缺失的值,它是枚举,包含 Some(T) 和 None 两个变体。例如,从集合中查找元素可能返回 Option,如果索引越界则返回 None,这样就不需要单独使用空指针或哨兵值。通过 unwrap、map、unwrap_or 等组合子可以安全地处理 Option。
- 【回答框架 2】Result<T, E> 用于可能失败且需要错误信息的操作,它是枚举,包含 Ok(T) 和 Err(E) 两个变体。例如,文件读取返回 Result,成功时包含文件内容,失败时包含错误类型。通过 ? 运算符可以在函数中提前返回错误,使错误处理更简洁。
- 【回答框架 3】两种类型都强调显式处理,编译器会强制开发者考虑缺失或错误的情况,从而避免空指针异常和未处理错误。例如,match 表达式匹配 Option 或 Result 的所有可能。
- 【关键点 1】Option 用于处理可能缺失的值,Result 用于处理可能失败且需错误信息的操作。
- 【关键点 2】使用模式匹配或组合子(如 map、and_then)处理 Option 和 Result。
- 【关键点 3】通过 ? 运算符在函数中传播错误,但只能用于返回 Result 或 Option 的函数。
- 【易错点 1】过度使用 unwrap 可能导致 panic,应优先使用显式处理方式。
- 【易错点 2】忽略 Result 的返回值会产生编译器警告,不应忽视。