面试题答案
一键面试// 定义绘图上下文trait
trait DrawContext {
// 假设这里有一些绘图相关的方法,这里暂不具体实现
}
// 定义Shape trait,关联类型PointType表示坐标点类型
trait Shape {
type PointType;
fn draw(&self, ctx: &impl DrawContext);
}
// 定义Circle结构体
struct Circle {
center: (i32, i32),
radius: i32,
}
impl Shape for Circle {
type PointType = (i32, i32);
fn draw(&self, ctx: &impl DrawContext) {
// 这里实现具体的绘制圆的逻辑
println!("Drawing circle at {:?} with radius {}", self.center, self.radius);
}
}
// 定义Rectangle结构体
struct Rectangle {
top_left: (i32, i32),
bottom_right: (i32, i32),
}
impl Shape for Rectangle {
type PointType = (i32, i32);
fn draw(&self, ctx: &impl DrawContext) {
// 这里实现具体的绘制矩形的逻辑
println!("Drawing rectangle from {:?} to {:?}", self.top_left, self.bottom_right);
}
}
这样设计使得每个图形结构体都可以独立实现Shape
trait,并且通过关联类型明确坐标点类型,增加了代码的扩展性和可读性。如果后续要添加新的图形,只需要创建新的结构体并实现Shape
trait即可。