Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 7 additions & 5 deletions course/basic/error_handle.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ outline: deep

<<<@/code/release/error_handle.zig#JustOneError1

[自动推断](#合并和推断错误)函数返回的错误集时,会经常用到这种写法。
[自动推断](#合并和推断错误) 函数返回的错误集时,会经常用到这种写法。

## 全局错误集

Expand Down Expand Up @@ -172,14 +172,16 @@ outline: deep

::: info 🅿️ 提示

> _当函数返回自动推导的错误集时,相对的这个函数会变成一个类泛型函数(因为这需要编译器在编译时进行推导),因此在执行某些操作时会变得有些不方便,例如获取函数指针或者在不同构建目标之间保持相同的错误集合。另外,推导错误和递归并不兼容。_
> _当函数返回自动推导的错误集时,相对的这个函数会变成一个类泛型函数(因为这需要编译器在编译时进行推导),因此在执行某些操作时会变得有些不方便,例如获取函数指针或者在不同构建目标之间保持相同的错误集合。_
>
> _注意,错误集推导和递归并不兼容。_

上面这句话看起来有点云里雾里,我们来两个例子来说明就可以
上述内容可能不够清晰,用两个例子作为说明

1. 不同构建目标之间可能存在着专属于架构的错误定义,这使得在不同架构上构建出来的代码的实际错误集并不相同,函数也同理(与 cpu 指令集实现有关)。
2. 当我们使用自动推导时,推导出的错误集是最小错误集,故可能一个函数被推导出 `ErrorSetOne!type` 和 `ErrorSetTwo!type` 两个错误集,这就使得在递归上出现了不兼容,不过可以使用 `switch` 来匹配错误集来解决该问题
2. 当我们使用自动推导时,推导出的错误集是最小错误集,故可能一个函数被推导出 `ErrorSetOne!type` 和 `ErrorSetTwo!type` 两个错误集,这会使得在递归上出现不兼容

对于上面的问题,其实更好的解决办法就是显式声明一个错误集,这会明确告诉编译器返回的错误种类都有什么
对于上述问题,解决办法是显式声明一个错误集,这会明确告诉编译器返回的错误集合都包含哪些错误

> _根据文档说明,上面的这些限制可能在未来会被改善。_

Expand Down