diff --git a/src/basic/result-error/panic.md b/src/basic/result-error/panic.md index 068240b5..c1b03793 100644 --- a/src/basic/result-error/panic.md +++ b/src/basic/result-error/panic.md @@ -179,3 +179,7 @@ let home: IpAddr = "127.0.0.1".parse().unwrap(); 还有一种情况,在展开过程中,如果展开本身 `panic` 了,那展开线程会终止,展开也随之停止。 一旦线程展开被终止或者完成,最终的输出结果是取决于哪个线程 `panic`:对于 `main` 线程,操作系统提供的终止功能 `core::intrinsics::abort()` 会被调用,最终结束当前的 `panic` 进程;如果是其它子线程,那么子线程就会简单的终止,同时信息会在稍后通过 `std::thread::join()` 进行收集。 + +## 课后练习 + +> [Rust By Practice](https://zh.practice.rs/result-panic/panic.html),支持代码在线编辑和运行,并提供详细的[习题解答](https://github.com/sunface/rust-by-practice)。 diff --git a/src/basic/result-error/result.md b/src/basic/result-error/result.md index c08cc7ae..17e96211 100644 --- a/src/basic/result-error/result.md +++ b/src/basic/result-error/result.md @@ -385,3 +385,7 @@ let x = try!(function_with_error()); 可以看出 `?` 的优势非常明显,何况 `?` 还能做链式调用。 总之,`try!` 作为前浪已经死在了沙滩上,**在当前版本中,我们要尽量避免使用 try!**。 + +## 课后练习 + +> [Rust By Practice](https://zh.practice.rs/result-panic/result.html),支持代码在线编辑和运行,并提供详细的[习题解答](https://github.com/sunface/rust-by-practice)。