S-JIS[2024-09-26] 変更履歴

Rust str型

Ruststd::str::str型のメモ。


概要

Rustの文字列リテラルの型が&str。

let s: &str = "abc";

文字列リテラルはダブルクォーテーションで囲む。中で改行も出来る。


関数(やメソッド)の引数として文字列を受け取りたい場合は&strで受ければいい。

fn example1(s: &str) {
    println!("{}", s);
}

引数の型を&strにしておくと、呼び出す側は、文字列リテラル(&str)の他に&Stringでも渡すことが出来る。

    example1("abc");

    let s: String = String::from("abc");
    example1(&s);

関数の返り値として文字列リテラルを返したい場合は、&strにライフタイム('staticとか)を指定する。

fn example2() -> &'static str {
    "abc"
}

しかし、文字列を返したい場合はStringを使うことの方が多いような気がする。


&strとOption<&str>の両方を受け取る関数の例

Rustでは関数のオーバーロードを作れない(引数の型が異なる同名関数を作れない)が、ひとつの関数の引数で&strとOption<&str>のどちらでも受け取れるようにすることが出来る。

(何故そんなことをしたいかと言うと、Rustでは&strにnullを保持できないので、普段は&strで受け取りつつ、何も無いときはNoneが渡せると便利だから)

fn example3<'a, T: Into<Option<&'a str>>>(s: T) {
    let s: Option<&str> = s.into();
    match s {
        Some(s) => println!("{}", s),
        None => println!("None"),
    }
}
    example3("abc");
    example3(None);

stdへ戻る / Rustへ戻る / 技術メモへ戻る
メールの送信先:ひしだま