Rust dyn

编程入门 行业动态 更新时间:2024-10-15 04:25:28

<a href=https://www.elefans.com/category/jswz/34/1762214.html style=Rust dyn"/>

Rust dyn

dyn - 动态分发 trait 对象

dyn是关键字,用于指示一个类型是动态分发(dynamic dispatch),也就是说,它是通过trait object实现的。这意味着这个类型在编译期间不确定,只有在运行时才能确定。

  • practice

trait object实现多态性。
假设有一个几何图形的类层次结构,例如圆形(Circle)和矩形(Rectangle),每种几何图形都有一个计算面积的方法。定义trait Shape来表示这个特征,并在每个几何图形中实现这个trait。

trait Shape {fn area(&self) -> f64;
}struct Circle {radius: f64,
}impl Shape for Circle {fn area(&self) -> f64 {std::f64::consts::PI * self.radius * self.radius}
}struct Rectangle {width: f64,height: f64,
}impl Shape for Rectangle {fn area(&self) -> f64 {self.width * self.height}
}

现在编写一个函数,可以计算不同类型几何图形的总面积。我们可以使用trait object来实现这个函数:

fn total_area(shapes: &[&dyn Shape]) -> f64 {let mut total = 0.0;for shape in shapes {total += shape.area();}total
}

&[&dyn Shape]类型的参数来接受几何图形的数组。数组中的每个元素都是一个对实现Shape trait的具体类型的引用。使用for循环遍历这个数组,并对每个元素调用area方法,计算它的面积,并将结果累加到总面积中。

创建一些具体的几何图形实例,并将它们传递给total_area函数,以计算它们的总面积:

fn main() {let shapes: Vec<&dyn Shape> = vec![&Circle { radius: 1.0 },&Rectangle { width: 3.0, height: 4.0 },//&Circle { radius: 1.5 },];let total = total_area(&shapes);println!("Total area: {}", total);
}

输出结果正确:

更多推荐

Rust dyn

本文发布于:2024-03-05 01:02:16,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1710895.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:Rust   dyn

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!