// 定义泛型枚举
enum MaybeValue<T> {
Value(T),
NoValue,
}
// 定义trait
trait ProcessValue {
fn process(&self) -> i32;
}
// 在MaybeValue<T>上实现ProcessValue trait
impl<T: std::ops::Mul<Output = T> + Into<i32>> ProcessValue for MaybeValue<T> {
fn process(&self) -> i32 {
match self {
MaybeValue::Value(v) => {
let squared: T = v * v;
squared.into()
}
MaybeValue::NoValue => 0,
}
}
}
// 测试代码
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_process_value() {
let value = MaybeValue::Value(2);
assert_eq!(value.process(), 4);
let no_value = MaybeValue::NoValue;
assert_eq!(no_value.process(), 0);
}
}