十二、错误处理
Published on
panic
最简单的错误处理方式是使用panic!宏,它简单地打印错误并退出程序。
panic!("crash and burn");
abort/unwind
处理panic有两种方式,可以通过编译器参数或配置文件的方式设置。默认为unwind
- unwind:回溯调用栈并进行清理工作
- abort:立即退出
Option
在Rust中,如果一个函数返回类型T,则它必须返回一个变量,不能返回空(类似NULL或nullptr),这样可以避免用户不检查空指针造成错误。如果确实需要返回空,则可以使用Option。Option是std库提供的一个枚举类型。Option<T>的取值为以下二者之一:
- Some(T):包含一个T类型的元素
- None:不包含任何元素
编译器会强制用户处理值为None的情况,从而提高安全性。Option的操作方式有:
- match:与其它枚举的处理方式相同,需要处理所有可能情况
- 解包:为Some时获取其值,为None时执行不同操作
- unwrap:为None时panic
- expect:为None时使用自定义信息报错
- ?:为None时使当前所在函数返回None
- or:为None时返回另一值。链式、立即
- or_else:为None时调用函数获取值并返回。链式、延迟
- get_or_insert:为None时插入值。立即
- get_or_insert_with:为None时调用函数获取值并插入。延迟
- 使用combinator进行后续操作:
- map:有值则对其进行操作,否则返回None
- and_then:有值则解包其值并进行操作,否则返回None
Result
Option只返回了错误,但是并不知道错误的原因。Result加强了这一点。一个Result<T, E>的取值为以下二者之一:
- Ok(T):成功,并返回一个T类型的值
- Err(E):失败,并返回一个E类型错误
Result同样可以使用match, unwrap, ?, map, and_then等进行操作。