💭
[Rustのデザインパターン学習] Newtype [振る舞い]
1. はじめに
- ChatGPT Plusで最近話題のGPT-4を使用し始めた_5daです。
- 「Rustのデザインパターン
NewType
について、実装例を3つ作成し解説してください」、
なんて入力するとそれはばっちりと解説してくれました。上記回答をそのまま本記事に転載しませんが、別の形で活用したいと思います。
- 「Rustのデザインパターン
2. GPT-4の活用例
- 質問
- 「RustのNewTypeパターンで作成したオブジェクト同士を比較する方法を教えて」
- 回答
-
RustのNewTypeパターンでは、新しい型をタプル構造体を使って定義します。
-
オブジェクト同士を比較するために、PartialEqとEqトレイトを実装する必要があります。以下に例を示します。
// NewTypeパターンで新しい型を定義 struct Meters(f64); // `PartialEq`トレイトを実装 impl PartialEq for Meters { fn eq(&self, other: &Self) -> bool { self.0 == other.0 } } // `Eq`トレイトを実装。`PartialEq`が実装されていれば、このトレイトは空でも構いません。 impl Eq for Meters {} fn main() { let m1 = Meters(5.0); let m2 = Meters(5.0); let m3 = Meters(10.0); println!("m1 == m2: {}", m1 == m2); // true println!("m1 == m3: {}", m1 == m3); // false }
-
この例では、Metersという新しい型をタプル構造体で定義しています。PartialEqトレイトを実装することで、Meters型のオブジェクト同士を比較できるようになります。PartialEqが実装されていれば、Eqトレイトは空でも構いません。これにより、オブジェクト同士の比較が可能になります。
-
2.1. 感想
-
改善案
- 先の例でも動くコードを回答してくれたわけですが、
#[derive(PartialEq)]
と書くほうが良さそうです。
//トレイトを自動実装 #[derive(PartialEq)] struct Meters(f64); fn main() { let m1 = Meters(5.0); let m2 = Meters(5.0); let m3 = Meters(10.0); println!("m1 == m2: {}", m1 == m2); // true println!("m1 == m3: {}", m1 == m3); // false }
- 先の例でも動くコードを回答してくれたわけですが、
3. おわりに
- 今週発表されたばかりのGPT-4ですが、ぜひ今後の動向に注目したいと思います。
これから先もどんどん新しい技術が出てきて、これまでの仕事の仕方が変わっていくのは間違いありませんね。 - うまく活用されている方を見習いながら、with ChatGPTな社会を生き抜いいきたいと思います。
読んで頂きありがとうございました。また次回もよろしくお願いいたします。
Discussion
PartialEq
はderive_more
クレートを使わなくてもderive
に書けると思います