回顾:可打印的点
本课属于 Coddy Rust 学习旅程的“面向对象编程”单元。第 39 课,共 61 课。
挑战
简单让我们把你学过的所有标准 trait 结合起来,创建一个功能齐全的 Point 结构体,它可以进行调试、优雅地显示,并比较是否相等!
你将把代码分成两个文件:
point.rs:定义一个公开的Point结构体,其中包含公开的x和y字段(两者都是i32)。你的 Point 应支持以下三项功能:- 使用
{:?}进行调试打印。自动派生此功能。 - 使用
{}以(x, y)格式进行易读的显示:使用std::fmt::Display手动实现此功能。 - 使用
==比较是否相等:派生PartialEq。
- 使用
main.rs:引入你的 point 模块,并使用提供的输入创建两个Point实例。通过打印第一个点的调试格式、打印第二个点的显示格式,以及比较两个点是否相等,展示这三项功能。
你的输出应展示这三项 trait 功能:
Debug: Point { x: {x1}, y: {y1} }
Display: ({x2}, {y2})
Equal: {true/false}例如,输入 3、5、3、5 时:
Debug: Point { x: 3, y: 5 }
Display: (3, 5)
Equal: true输入 10、20、5、15 时:
Debug: Point { x: 10, y: 20 }
Display: (5, 15)
Equal: false你将收到四个输入:第一个点的 x 和 y 坐标,接着是第二个点的 x 和 y 坐标。将每个输入解析为 i32。
亲手试试
mod point;
use point::Point;
fn main() {
// 读取 4 个输入:x1、y1、x2、y2
let mut input = String::new();
std::io::stdin().read_line(&mut input).expect("Failed to read line");
let x1: i32 = input.trim().parse().expect("Invalid input");
input.clear();
std::io::stdin().read_line(&mut input).expect("Failed to read line");
let y1: i32 = input.trim().parse().expect("Invalid input");
input.clear();
std::io::stdin().read_line(&mut input).expect("Failed to read line");
let x2: i32 = input.trim().parse().expect("Invalid input");
input.clear();
std::io::stdin().read_line(&mut input).expect("Failed to read line");
let y2: i32 = input.trim().parse().expect("Invalid input");
// TODO:用输入创建两个 Point 实例
// TODO:用调试格式 {:?} 输出第一个点
// 格式:"Debug: Point { x: ..., y: ... }"
// TODO:用显示格式 {} 输出第二个点
// 格式:"Display: (..., ...)"
// TODO:比较这两个点并输出结果
// 格式:"Equal: true" 或 "Equal: false"
}
面向对象编程中的所有课
自己练习: Rust 在线编译器