Rust メモ String に対して match
Rust の match は非常に強力。
様々なパターンマッチや、 destructuring が使えて非常に便利
詳しくは
たまに String な変数に対して match を使いたいことがある。
が、こんなふうにやろうとしてももちろんできない。
s は String なのに対して、 パターンである "hoge" は &'static str なので型が一致しない。
String リテラルはないし、パターンの部分には enum variant や構造体、リテラルを書くことができるが(slice は experimentalだけど)、式を書くことはできない。
ので、"hoge".to_string() なんて書くことはできない。
つーことで String ではムリ。
だが、 &str ならできる。
そして &str は String のビューに過ぎなかった。 String から &str を作るのは簡単でコストも小さい。
こんな感じで。
1つ目 &*s
String は str への Deref を実装しているので、 *s で dereference することで str が手に入るので &*s で &str という寸法。
2つ目 &s[..]
String を 全体をスライシングしても &str が手に入る
3つ目は単純にメソッドがあるのでそれを使って &str に変換している
--
ついでに、 String から &str は安いが、&str から String にするのはメモリアロケーションが発生してそれなりにコストがかかるので、 match に限らず文字列を比較したい時には文字列リテラルを to_string() とかで String にするより、今回のように String を &str にしたほうがいい