设计思路
- 首先定义
Processable
trait,其中包含一个可能出错的方法。
- 接着定义泛型结构体
ResultContainer<T>
,T
需要实现 Processable
trait。
- 在
ResultContainer
结构体中定义 process_all
方法,该方法调用 T
实现的 Processable
trait 方法,并统一处理可能出现的错误,最后将错误返回给调用者。
代码示例(以Rust语言为例)
// 定义Processable trait
trait Processable {
type Error;
fn process(&self) -> Result<(), Self::Error>;
}
// 定义泛型结构体ResultContainer
struct ResultContainer<T> where T: Processable {
data: T,
}
impl<T> ResultContainer<T> where T: Processable {
// 构造函数
fn new(data: T) -> Self {
ResultContainer { data }
}
// process_all方法,统一处理错误并返回
fn process_all(&self) -> Result<(), T::Error> {
self.data.process()
}
}
// 示例实现Processable trait
struct Example {
value: i32,
}
impl Processable for Example {
type Error = String;
fn process(&self) -> Result<(), Self::Error> {
if self.value < 0 {
Err("Value is negative".to_string())
} else {
Ok(())
}
}
}
fn main() {
let example1 = Example { value: 5 };
let container1 = ResultContainer::new(example1);
match container1.process_all() {
Ok(()) => println!("Processed successfully"),
Err(e) => println!("Error: {}", e),
}
let example2 = Example { value: -1 };
let container2 = ResultContainer::new(example2);
match container2.process_all() {
Ok(()) => println!("Processed successfully"),
Err(e) => println!("Error: {}", e),
}
}