요약 - 출력 가능한 Point
Coddy Rust 여정의 Object Oriented Programming 섹션에 포함된 레슨 — 61개 중 39번째.
챌린지
쉬움디버깅이 가능하고, 아름답게 표시되며, 동일성 비교가 가능한 완전한 기능을 갖춘 Point 구조체를 만들어 지금까지 배운 모든 표준 트레이트들을 하나로 모아봅시다!
코드는 두 개의 파일로 구성됩니다:
point.rs: 공용x및y필드(둘 다i32)를 가진 공용Point구조체를 정의합니다. Point는 다음 세 가지 기능을 지원해야 합니다:{:?}를 사용한 디버그 출력 — 이를 자동으로 파생(derive)하세요.(x, y)형식의{}를 사용한 사용자 친화적 표시 —std::fmt::Display를 사용하여 수동으로 구현하세요.==를 사용한 동일성 비교 —PartialEq를 파생하세요.
main.rs: point 모듈을 가져와 제공된 입력을 사용하여 두 개의Point인스턴스를 생성합니다. 첫 번째 포인트는 디버그 형식으로 출력하고, 두 번째 포인트는 표시 형식으로 출력하며, 두 포인트가 같은지 비교하여 세 가지 기능을 모두 시연하세요.
출력은 세 가지 트레이트 기능이 작동하는 모습을 보여주어야 합니다:
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() {
// 네 개의 입력값 읽기: 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"
}