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
にしたほうがいい