まとめ:表示可能な Point
CoddyのRustジャーニー「Object Oriented Programming」セクションの一部 — レッスン 39/61。
チャレンジ
簡単デバッグ、美しい表示、そして等価性の比較が可能な、フル機能の Point 構造体を作成することで、これまでに学んだすべての標準トレイトをまとめてみましょう!
コードは2つのファイルに分けて構成します:
point.rs: 公開されたxおよびyフィールド(どちらもi32)を持つ公開Point構造体を定義します。Pointは以下の3つの機能をサポートする必要があります:{:?}によるデバッグ出力 — これを自動的に derive します(x, y)形式の{}によるユーザーフレンドリーな表示 —std::fmt::Displayを使用して手動で実装します==による等価比較 —PartialEqを derive します
main.rs: pointモジュールを取り込み、提供された入力を使用して2つのPointインスタンスを作成します。最初のポイントをデバッグ形式で出力し、2番目のポイントを表示形式で出力し、2つのポイントが等しいかどうかを比較することで、3つの機能すべてを実証してください。
出力には、3つのトレイト機能がすべて動作していることを示す必要があります:
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: false4つの入力を受け取ります:最初のポイントのx座標とy座標、続いて2番目のポイントの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: 入力を使用して2つの Point インスタンスを作成する
// TODO: デバッグフォーマット {:?} を使用して1つ目のポイントを表示する
// フォーマット: "Debug: Point { x: ..., y: ... }"
// TODO: ディスプレイフォーマット {} を使用して2つ目のポイントを表示する
// フォーマット: "Display: (..., ...)"
// TODO: 2つのポイントを比較して結果を表示する
// フォーマット: "Equal: true" または "Equal: false"
}