Skip to content

Commit

Permalink
fix: 移除错误集合推导的错误说明 (#215)
Browse files Browse the repository at this point in the history
  • Loading branch information
jinzhongjia authored Feb 7, 2025
1 parent faabae8 commit 04818ec
Showing 1 changed file with 7 additions and 5 deletions.
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

0 comments on commit 04818ec

Please sign in to comment.