fn main() {
use std::fmt;
#[allow(dead_code)]
struct Point {
x: i32,
y: i32,
}
// OutlinePrint 这个trait 继承fmt::Display,
// 并提供一个额外的 outline_print 功能.
trait OutlinePrint: fmt::Display {
// outline_print是一个默认实现功能函数.
// 利用self数据进行二次加工.
fn outline_print(&self) {
let output = self.to_string();
let len = output.len();
println!("{}", "*".repeat(len + 4));
println!("*{}*", " ".repeat(len + 2));
println!("* {} *", output);
println!("*{}*", " ".repeat(len + 2));
println!("{}", "*".repeat(len + 4));
}
}
// 由于OutlinePrint已经默认实现了outline_print功能,
// 因此这里只要声明一下Point拥有这个trait即可.
impl OutlinePrint for Point {}
// 这里仍然需要声明Point拥有fmt::Display, 这是因为Rust的语法要求.
impl fmt::Display for Point {
// 为什么这里要写这个方法?
// 那是因为fmt::Display只是定义了一个接口, 并没有实现这个方法.
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "({}, {})", self.x, self.y)
}
}
// 通过三面这几种定义、组合、声明, 最终完成了打印效果改装.
let p = Point {x: 1, y: 2};
p.outline_print();
// output:
// **********
// * *
// * (1, 2) *
// * *
// **********
}
rust--trait继承另外一个trait
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
相关阅读更多精彩内容
- 华为近日清退了一批34岁以上的中年员工,都是程序员,原因很容易想得到,中年人精力和创造力方面弱很多,而稀少的管理岗...
- 我的变化是随风潜入夜,润物细无声,不知何时说话我也可以妙语连珠,出口成章,不知何时你可以自信的现在众人面前分享,不...