目次
前回の記事はこちら。自分用のメモなので、読みにくいかもです。
第8章
7章はパッケージなので後回しにして、8章に入ります。 8章はコレクションです。
ベクタ型
- ベクタは同じ型の値だけ保持可能。
- ジェネリクスで型を指定可能 -
Vec<i32>
とか。
- ジェネリクスで型を指定可能 -
vec!
マクロで初期値とか設定すると便利。- ベクタに値を追加するのは
push
。もちろん値が変わるので元のベクタにはmut
が必要 - ベクタのスコープ(ライフサイクル)は要素に対する参照があるのとないので話が変わってくる
- メモリの確保などの影響で、ベクタ全体に対して借用の規則が矯正されると。
- ベクタの値を読むのはいくつか方法あり
get
メソッドはOptionを返す&v[2]
の添字記法の場合はパニックの可能性あり
- 走査(唐突に参照外しが出てきた)
- 単純に値を取り出す場合は
for - in &v
- 単純に値を取り出す場合は
- Enumをベクタにいれることで、異なる型も保持可能(まぁ、Enumの型では固定されるけど)。
- これだけのためにEnumを使うことってあるのかな?
- トレイとオブジェクトに関する文章はちょっとわかりにくい。。。
説明以外のメソッドなどについてはAPIドキュメント見ましょうと(リンクも張ってくれてると嬉しいなぁと思ったり。まぁ、バージョンとかの絡みがあるから難しいか)。
文字列型
-
文字列はUTF-8でエンコードされた文字を扱うための型。
-
str
は文字列データへの参照。 -
String
型は言語のコアではなく、標準ライブラリに入っている文字列型。- 他にもあるのか。。。
OsString
とか。。。
- 他にもあるのか。。。
-
文字リテラルはDisplayトレイトを実装していると。
-
.to_string()
=String::from
-
Stringはコレクションだから追加とかが可能なのか、なるほど。
-
push_str
とpush
-
&String
は&str
に型強制(キャスト?)してくれる。してくれる場合としてくれない場合もあるのかな?s2
の所有権は奪わない形で扱うのでs2
はこのあとも使えていると。- ここでは、
s1
を変更したあとに所有権がs3
に持っていかれてる? format!
を使うとどの所有権も奪わないので、これを使うほうが考え方は簡単そう。ただし、効率がいいかはわからん。
-
添字記法でのアクセスを
String
は許容していない- 文字の境界が必ずしも1バイトとは限らないから。
- スライスも同様。
-
基本的には
.chars()
で文字としてアクセスするのが良い。 -
逆にバイト表現を得る方法はどうするんだろう?
ハッシュマップ
- いろんな呼び方あるよね。Rustではハッシュマップだよ。
- ハッシュマップは
use
しないと使えない - キーは1つの型、値も1つの型
- タプルのベクタから
collect
で生成。なるほど。- タプルのベクタだと、タプルの中身は同じものであることが言える?
- -> 言える。エレメント数が異なるとコンパイルエラーになった
- タプルのベクタだと、タプルの中身は同じものであることが言える?
- 所有権周りの話。
- これ、ベクタのときに話してほしい感じがした。
- 値を渡すか参照を渡すかによって話が変わってくる。詳しくは10章
- このあたりが自分が混乱していた元だ。
entry
とinsert
の違いentry
の戻り値はEntry
というenumでor_insert
というメソッドがありそれを使うと存在しない場合だけinsertが呼ばれる。- これ便利だ。毎回
exist
あたりで存在チェックしてた気がする。
- これ便利だ。毎回
or_insert
は可変参照&mut V
を返す。- これを
let count
で束縛するときに、中身が可変かどうかをcountには指定しないのか。。。
- これを
まとめ
一応、大学などで習ってた(はず)ですが、 スタックとヒープを意識して考えないといけないなぁというのを何度か意識させられた感じです。
あと、これはRustに限らずですが、それぞれがどんな関数を持っているか、どんなメソッドを持っているか、どんなマクロが存在するかなどを探すときにみんなどうしてるんだろう? 人に教えてもらっているのか、APIリファレンスを探すのか、そういったところをみんながどういう感じにプログラミング言語を勉強しているか、業務で書いているのかと言うのが気になりました。
comments powered by Disqus
See Also by Hugo
- Rust the book - 第6章
- Rust the book - 第10章
- Rust the book - 第9章
- Rust the book - 第5章
- Rust the book - 第4章