【发布时间】:2022-08-15 04:55:48
【问题描述】:
我试图一次为多种类型实现一个特征,我发现避免代码重复的唯一方法是将所有类型转换为一个通用结构并为该结构实现特征,如下所示。
trait Increment {
fn increment(&self) -> Option<String>;
}
struct NumberWrapper {
number: String,
}
impl Increment for NumberWrapper {
fn increment(&self) -> Option<String> {
let num: Result<u64, _> = self.number.parse();
match num {
Err(_) => None,
Ok(x) => Some((x + 1).to_string())
}
}
}
impl<T> From<T> for NumberWrapper where T: ToString {
fn from(input: T) -> NumberWrapper {
NumberWrapper { number: input.to_string() }
}
}
fn main() {
let number_u8: u8 = 10;
println!("number_u8 is: {}", NumberWrapper::from(number_u8).increment().unwrap());
let number_u32: u16 = 10;
println!("number_u16 is: {}", NumberWrapper::from(number_u32).increment().unwrap());
let number_u32: u32 = 10;
println!("number_u32 is: {}", NumberWrapper::from(number_u32).increment().unwrap());
let number_u64: u64 = 10;
println!("number_u64 is: {}", NumberWrapper::from(number_u64).increment().unwrap());
}
有没有其他方法可以做到这一点?
【问题讨论】:
标签: rust struct traits rust-cargo