Rust メモ String に対して match

Rust の match は非常に強力。

様々なパターンマッチや、 destructuring が使えて非常に便利

詳しくは

たまに String な変数に対して match を使いたいことがある。

が、こんなふうにやろうとしてももちろんできない。

sString なのに対して、 パターンである "hoge"&'static str なので型が一致しない。

String リテラルはないし、パターンの部分には enum variant や構造体、リテラルを書くことができるが(slice は experimentalだけど)、式を書くことはできない。

ので、"hoge".to_string() なんて書くことはできない。

つーことで String ではムリ。

だが、 &str ならできる。

そして &strString のビューに過ぎなかった。 String から &str を作るのは簡単でコストも小さい。

こんな感じで。

1つ目 &*s

Stringstr への Deref を実装しているので、 *s で dereference することで str が手に入るので &*s&str という寸法。

2つ目 &s[..]

String を 全体をスライシングしても &str が手に入る

3つ目は単純にメソッドがあるのでそれを使って &str に変換している

--

ついでに、 String から &str は安いが、&str から String にするのはメモリアロケーションが発生してそれなりにコストがかかるので、 match に限らず文字列を比較したい時には文字列リテラルto_string() とかで String にするより、今回のように String&str にしたほうがいい