From df894ec0c9bd8887703bbbbd2ea58f787c5f7a95 Mon Sep 17 00:00:00 2001 From: Jesse <35264598+JesseAtSZ@users.noreply.github.com> Date: Wed, 19 Jan 2022 21:45:12 +0800 Subject: [PATCH] Update result.md --- book/contents/basic/result-error/result.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/book/contents/basic/result-error/result.md b/book/contents/basic/result-error/result.md index 81e2a4ee..1eb714b0 100644 --- a/book/contents/basic/result-error/result.md +++ b/book/contents/basic/result-error/result.md @@ -246,7 +246,7 @@ fn read_username_from_file() -> Result { 从文件读取数据到字符串中,是比较常见的操作,因此 Rust 标准库为我们提供了 `fs::read_to_string` 函数,该函数内部会打开一个文件、创建 `String`、读取文件内容最后写入字符串并返回,因为该函数其实与本章讲的内容关系不大,因此放在最后来讲,其实只是我想震你们一下 :) -#### ?用于Option的返回 +#### ? 用于Option的返回 `?` 不仅仅可以用于 `Result` 的传播,还能用于 `Option` 的传播,再来回忆下 `Option` 的定义: ```rust pub enum Option { @@ -285,7 +285,7 @@ fn first(arr: &[i32]) -> Option<&i32> { arr.get(0)? } ``` -这段代码无法通过编译,切记:`?` 操作符需要一个变量来承载正确的值,只有错误值能直接返回,正确的值不行。因此 `?` 只能用于以下形式: +这段代码无法通过编译,切记:`?` 操作符需要一个变量来承载正确的值,这个函数只会返回 `Some(&i32)` 或者 `None`,只有错误值能直接返回,正确的值不行,所以如果数组中存在 0 号元素,那么函数第二行使用 `?` 后的返回类型为 `&i32` 而不是 `Some(&i32)`。因此 `?` 只能用于以下形式: - `let v = xxx()?;` - `xxx()?.yyy()?;`