|
|
|
@ -4,7 +4,7 @@
|
|
|
|
|
> <br>
|
|
|
|
|
> commit a764530433720fe09ae2d97874c25341f8322573
|
|
|
|
|
|
|
|
|
|
大部分错误并没有严重到需要程序完全停止执行。有时,一个函数会因为一个容易理解并做出反应的原因失败。例如,如果尝试打开一个文件不过由于文件并不存在而操作失败,这时我们可能想要创建这个文件而不是终止进程。
|
|
|
|
|
大部分错误并没有严重到需要程序完全停止执行。有时,一个函数会因为一个容易理解并做出反应的原因失败。例如,如果尝试打开一个文件不过由于文件并不存在而失败,此时我们可能想要创建这个文件而不是终止进程。
|
|
|
|
|
|
|
|
|
|
回忆一下第二章 “使用 `Result` 类型来处理潜在的错误” 部分中的那个 `Result` 枚举,它定义有如下两个成员,`Ok` 和 `Err`:
|
|
|
|
|
|
|
|
|
@ -33,7 +33,7 @@ fn main() {
|
|
|
|
|
|
|
|
|
|
<span class="caption">示例 9-3:打开文件</span>
|
|
|
|
|
|
|
|
|
|
如何知道 `File::open` 返回一个 `Result` 呢?我们可以查看标准库 API 文档,或者可以直接问编译器!如果给 `f` 某个我们知道 **不是** 函数返回值类型的类型注解,接着尝试编译代码,编译器会告诉我们类型不匹配。然后错误信息会告诉我们 `f` 的类型 **应该** 是什么.让我们试试:我们知道 `File::open` 的返回值不是 `u32` 类型的,所以将 `let f` 语句改为如下:
|
|
|
|
|
如何知道 `File::open` 返回一个 `Result` 呢?我们可以查看标准库 API 文档,或者可以直接问编译器!如果给 `f` 某个我们知道 **不是** 函数返回值类型的类型注解,接着尝试编译代码,编译器会告诉我们类型不匹配。然后错误信息会告诉我们 `f` 的类型 **应该** 是什么。让我们试试!我们知道 `File::open` 的返回值不是 `u32` 类型的,所以将 `let f` 语句改为如下:
|
|
|
|
|
|
|
|
|
|
```rust,ignore
|
|
|
|
|
let f: u32 = File::open("hello.txt");
|
|
|
|
|