use std::ops::Add;
// 定义泛型枚举
enum MaybeValue<T> {
Empty,
Value(T),
}
// 定义处理函数
fn process_maybe_value<T>(mv: MaybeValue<T>) -> Option<T>
where
T: Add<Output = T> + Copy,
{
match mv {
MaybeValue::Empty => None,
MaybeValue::Value(val) => Some(val + T::from(1)),
}
}
fn main() {
// 测试i32类型
let mv_i32: MaybeValue<i32> = MaybeValue::Value(5);
assert_eq!(process_maybe_value(mv_i32), Some(6));
let mv_empty_i32: MaybeValue<i32> = MaybeValue::Empty;
assert_eq!(process_maybe_value(mv_empty_i32), None);
// 测试f64类型
let mv_f64: MaybeValue<f64> = MaybeValue::Value(5.5);
assert_eq!(process_maybe_value(mv_f64), Some(6.5));
let mv_empty_f64: MaybeValue<f64> = MaybeValue::Empty;
assert_eq!(process_maybe_value(mv_empty_f64), None);
}