Progrust Library.

// 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]のスライスと同じで、長さの情報が型に含まれません。コンパイル時にサイズの分からない型(動的サイズ型)はそのままでは変数や引数に置けないため、実体の位置と長さをまとめて持つ&strBox<str>などのポインタ型を通して扱う決まりになっています(The Rust Reference, Textual types)。なおstrの中身は常に有効なUTF-8であることが前提で、標準ライブラリのメソッドはこれを仮定して動作します。

この辞書が使われているページ

backlinks 4

  1. 辞書スライス
  2. 辞書文字列リテラル
  3. 辞書文字列型
  4. 動かして学ぶRustプログラミング問題集 › 第6章 文字列とベクタ