第16回です。
前回はこちら。
[第16回の様子]
2021/10/27に第16回を開催した。
内容としてはRust By Example 日本語版の「5.2. リテラル」、「5.3. 型推論」に取り組んだ。
参加者はまたちょっと増えて、全部で10人。
Slackでの書き込みは相変わらず少なめだが、dojo開催中の会話が増えてきて、よい雰囲気。
[学んだこと]
let x = 1u8; // u8型の1 let y = 2u32;// u32型の2 let z = 3f32;// f32型の3
let f = 1.0; // 通常はf64型だが...
let z = 3f32;
let f2 = f * z; // zと型が一致して、fもf32型になる
// &変数
で値ではなく参照を渡す println!("size of `z` in bytes: {}", std::mem::size_of_val(&z)); // size of `z` in bytes: 4 (32ビット=4バイト) println!("size of `f` in bytes: {}", std::mem::size_of_val(&f)); // size of `f` in bytes: 4
- 5.3. 型推論
let e = 5u8;
のu8を先ほどはサフィックスと呼んでいたが、アノテーションともいうらしい- 先ほどの
f * z
がzに引かれてf32型になったのと同様、その後の使われ方によって型推論が行われる
// この時点では何型のベクトルかわからない let mut vec = Vec::new(); let e = 5u8; vec.push(e); // これによりu8型のベクトル(Vec<u8>)と決まる
fn main() { let mut vec = Vec::new(); } // 以下のエラー error[E0282]: type annotations needed for `Vec<T>` --> src/main.rs:8:19 | 8 | let mut vec = Vec::new(); | ------- ^^^^^^^^ cannot infer type for type parameter `T` | | | consider giving `vec` the explicit type `Vec<T>`, where the type parameter `T` is specified
[まとめ]
モブプログラミングスタイルでRust dojoを開催した。
Rustの型にちょっと詳しくなった!
今週のプルリクエストはこちら。