// 定义Processor trait
trait Processor {
fn process(self) -> Self;
}
// 定义泛型函数
fn process_result<T: Processor>(result: Result<T, String>) -> Result<T, String> {
match result {
Ok(value) => Ok(value.process()),
Err(err) => Err(err),
}
}
所使用的trait bounds及好处
- trait bounds:在函数定义
fn process_result<T: Processor>(result: Result<T, String>) -> Result<T, String>
中,T: Processor
表示类型参数T
必须实现Processor
trait。这是一种trait bounds的表达方式。
- 好处:
- 类型安全:通过这种方式,编译器可以在编译时确保传入的
Result
内部类型T
一定实现了Processor
trait,从而避免运行时因为调用不存在的process
方法而导致错误。
- 代码复用:泛型函数可以处理任何实现了
Processor
trait的类型,提高了代码的复用性。不同类型只要实现了Processor
trait,都可以使用这个process_result
函数来处理其Result
值。
- 错误处理:函数在处理
Result
为Err
的情况时,直接返回错误信息,保证了错误信息的合理传递,使得调用者可以根据具体错误情况进行相应处理。