// dictionary
文字列スライス.
文字列スライスstrは、UTF-8でエンコードされた文字列データの並びを表すプリミティブ型です。コンパイル時にサイズが決まらない「動的サイズ型」のため単独の変数には置けず、常に&strをはじめとするポインタ型を通して使います。文字列リテラルの型&'static strもその一種です。
fn main() {
let receipt = "りんご 300円";
let name = &receipt[0..9]; // ひらがなは1文字3バイト
println!("品名: {name}");
println!("バイト長: {}", receipt.len());
}Playgroundで開く参照とスライスの関係
&strは「データの先頭を指すポインタ」と「バイト長」の2つを組にした参照で、文字列全体だけでなく一部分だけを切り出して参照できます。ヒープ上の文字列型(String)が持つデータも、静的メモリ上のリテラルも同じ&strで借用できるため、文字列を受け取る関数の引数は&strにするのが定番です。
補足
なぜ&strの形でしか使えないのか
strのメモリ表現はバイト列[u8]のスライスと同じで、長さの情報が型に含まれません。コンパイル時にサイズの分からない型(動的サイズ型)はそのままでは変数や引数に置けないため、実体の位置と長さをまとめて持つ&str・Box<str>などのポインタ型を通して扱う決まりになっています(The Rust Reference, Textual types)。なおstrの中身は常に有効なUTF-8であることが前提で、標準ライブラリのメソッドはこれを仮定して動作します。
この辞書が使われているページ
backlinks 4