// dictionary
包括パターン.
包括パターン(catch-all pattern)は、match式の網羅性チェックを満たすため、それまでのアームに一致しなかった残りすべての値を最後のアームでまとめて処理するパターンです1。i32のように取りうる値を列挙しきれない型でよく使われ、変数名を書いて値を束縛する「識別子パターン」と、_を書いて値を捨てる「ワイルドカードパターン」の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
-
The Rust Programming Language: Catch-all Patterns and the
_Placeholder — 特定の値だけ個別に処理し、残りすべての値をまとめて処理するアームをcatch-allパターンと呼ぶと説明しています。 ↩ -
The Rust Reference: Wildcard pattern — ワイルドカードパターン
_は識別子パターンと異なり、マッチした値をコピー・ムーブ・借用しないと定義しています。 ↩
この辞書が使われているページ
backlinks 4