先週に続いて第4回です。
[第4回の様子]
2021/08/4に第4回を開催した。
内容としてはRust By Example 日本語版の「1.2.2. ディスプレイ」を後半から最後まで読んで演習に取り組んだ。
参加者は全部で9人。先週からまた少し減っているが、発言しやすい人数といえばまあそんな感じもする。
とはいえい今日は忘れていた人も多かったようなので次回に期待。
今回は、前回終了時に決めておいたメンバーにドライバーをお願いした。今回も終了時にドライバーを指名したので、今後この指名制度が定着していきそう。
今扱っているテキストは演習形式ではあるものの、やや内容に飛躍があるので、The Rust Programming Languageの方が良いのでは、という意見もあった。来週相談して決めよう。
今週も開催前後のSlackでのやりとりがたくさん🎉
高収入エンジニア御用達(?)のRustの新しいバージョンが出たみたい。
突撃!Rust dojo。
来週は来てね!
[学んだこと]
- 構造体で名前なしフィールドを2個もつやつは以下のように定義する。シンプルだった
use std::fmt; struct MinMax(i64, i64); impl fmt::Display for MinMax { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { write!(f, "({}, {})", self.0, self.1) } }
- 名前なしフィールドの場合はDisplayトレイトの実装で、
self.0, self.1
のようにフィールドをインデックスで出力している - 他方、名前ありフィールドの場合は名前で指定してDisplayを実装する形になる
struct Point2D { x: f64, y: f64, } impl fmt::Display for Point2D { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { write!(f, "x: {}, y: {}", self.x, self.y) // この部分 } }
Display: x: 3.3, y: 7.2 Debug: Point2D { x: 3.3, y: 7.2, }
Point2D {
の半角スペースが構造体の定義でスペースなくしたらなくなるのか?と思って実験してもらったが、バイトコードに変換された時点で無視されるようで出力は変わらなかった。- 前回か前々回で登場した
{:b}
はfmt::Binary
を実装することで出力できるようになる - ドライバの方に手を動かして実装してもらった。
// 出力内容はDisplayのときとおなじ... impl fmt::Binary for Point2D { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { write!(f, "x: {}, y: {}", self.x, self.y) } }
- 今日の演習問題は以下の出力を得る構造体を実装するというもの
Display: 3.3 + 7.2i Debug: Complex { real: 3.3, imag: 7.2 }
- まずは構造体を定義する:ほぼPoint2D構造体と同じ
#[derive(Debug)] struct Complex{ real: f64, imag: f64, }
- Displayの実装はちょっとだけ変更して以下のように。
impl fmt::Display for Complex { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { write!(f, "{} + {}i", self.real, self.imag) } }
- 動作確認用のコードは以下のようにした。
let complex = Complex { real: 3.3, imag: 7.2 }; println!("Complex:"); println!("Display: {}", complex); // Display: 3.3 + 7.2i println!("Debug: {:?}", complex); // Debug: Complex { real: 3.3, imag: 7.2 } println!("Debug: {:#?}", complex); // Debug: Complex { // real: 3.3, // imag: 7.2, // }
[まとめ]
モブプログラミングスタイルでRust dojoをやった!
fmt::Display
トレイトもfmt::Binary
トレイトも実装できた(中身は微妙だけど)!
今週のプルリクエストはこちら。