rustツアーでこのようなコードが
fn main() {
let x = 42;
match x {
0 => {
println!("found zero");
}
// 複数の値にマッチ
1 | 2 => {
println!("found 1 or 2!");
}
// 範囲にマッチ
3..=9 => {
println!("found a number 3 to 9 inclusively");
}
// マッチした数字を変数に束縛
matched_num @ 10..=100 => {
println!("found {} number between 10 to 100!", matched_num);
}
// どのパターンにもマッチしない場合のデフォルトマッチが必須
_ => {
println!("found something else!");
}
}
}
@は、コメントに書いてあるように変数に代入される。
Copyが実装されているプリミティブ型なら所有権は移動しないが、以下のような型の場合は所有権が移動する。
let s = String::from("hello");
match s {
std @ _ => println!("matched{}", std),
}
println!("{}", s); // error occurs here