RustのcharとStringと&str
前提
charは文字型
Stringと&strは文字列型
シングルクォートで囲う
一文字
ユニコードのコードポイントと一対一に対応する
u32型にキャストできる
32bit長
slice
プリミティブ
immutable
固定長
文字列への参照
実態はutf-8のバイト列への参照
""でくくった文字列リテラルの宣言は&str型になる
to_string()でString型にキャスト
この操作で、新たにヒープ上にメモリが確保される
返り値が&strの関数にはライフタイムを設定しないといけない(?)
でもstrという型はないよね?なんで?
vec
ヒープメモリ上に配置
utf-8の文字列であることが保証される
UTF-8文字列
サイズはmutable
as_str()で&str型にキャスト
この操作は参照を取得するだけなので新たなメモリは確保されない
Strgin変数の先頭に&をつけても&str型になる
&をつけることで、変数の参照を取得できる
String型同士の+での文字列の連結はできない
何が違う
いつ使う
キャスト
str と String の使い分けに関する、ものすごく実用に偏った説明「仮引数では基本的に &str、ただしその関数の実装で String が必ず必要なら String で受ける。構造体のメンバについては、str と String の区別がつかないうちは全部 String で困らない」tweet 参考
めちゃくちゃ種類あるのか