Progrust Library.

// dictionary

包括パターン.

包括パターン(catch-all pattern)は、match式の網羅性チェックを満たすため、それまでのアームに一致しなかった残りすべての値を最後のアームでまとめて処理するパターンです1i32のように取りうる値を列挙しきれない型でよく使われ、変数名を書いて値を束縛する「識別子パターン」と、_を書いて値を捨てる「ワイルドカードパターン」の2通りの書き方があります。

fn shipping_fee(distance_km: i32) -> i32 {
    match distance_km {
        0..=5 => 0,
        6..=20 => 300,
        other => other * 20, // その他(21km以上など): 距離に応じた従量課金
    }
}

fn main() {
    for distance in [3, 15, 50] {
        println!("{distance}km: {}円", shipping_fee(distance));
    }
}
Playgroundで開く

上記のotherが識別子パターンで、一致した値(この場合はdistance_kmそのもの)を変数otherに束縛し、右辺のの中で使えるようにします。

ワイルドカードパターンで値を捨てる

束縛した値を使わない場合は_を使います。変数名で束縛すると未使用のままでは警告が出ますが、_は値をコピーもムーブ借用もせずに捨てるため警告が出ません2

処理自体を何もしたくない場合は、アームの式にユニット型の値()をそのまま書きます。

fn handle_key(code: i32) {
    match code {
        27 => println!("Escキーが押されました"),
        _ => (), // それ以外のキーは無視して何もしない
    }
}

fn main() {
    for code in [27, 65] {
        handle_key(code);
    }
}
Playgroundで開く

Footnotes

  1. The Rust Programming Language: Catch-all Patterns and the _ Placeholder — 特定の値だけ個別に処理し、残りすべての値をまとめて処理するアームをcatch-allパターンと呼ぶと説明しています。

  2. The Rust Reference: Wildcard pattern — ワイルドカードパターン_は識別子パターンと異なり、マッチした値をコピー・ムーブ・借用しないと定義しています。

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

backlinks 4

  1. 辞書if let式
  2. 辞書match式
  3. 動かして学ぶRustプログラミング問題集 › 第11章 列挙型とmatch式
  4. 動かして学ぶRustプログラミング問題集 › 第12章 OptionとResult