面试题答案
一键面试// 定义序列化trait
trait Serialize {
type Output;
fn serialize(&self) -> Self::Output;
}
// 定义反序列化trait,依赖于Serialize的输出类型
trait Deserialize<T> {
fn deserialize(data: T) -> Self;
}
// 示例结构体
struct MyStruct {
value: i32,
}
// 实现Serialize trait
impl Serialize for MyStruct {
type Output = Vec<u8>;
fn serialize(&self) -> Self::Output {
// 简单示例,实际应使用更复杂的序列化逻辑
self.value.to_le_bytes().to_vec()
}
}
// 实现Deserialize trait
impl Deserialize<Vec<u8>> for MyStruct {
fn deserialize(data: Vec<u8>) -> Self {
let value = i32::from_le_bytes(data.try_into().expect("Data length must be 4"));
MyStruct { value }
}
}
上述代码定义了两个相互依赖的trait:Serialize
和Deserialize
。Serialize
定义了将对象序列化为某种类型的方法,Deserialize
则依赖于Serialize
的输出类型来定义反序列化的方法。MyStruct
结构体实现了这两个trait,展示了如何确保类型安全和泛型约束。