配列とスライス

タプル同様、配列とスライスも以下のようにデストラクトできます:

fn main() {
    // Try changing the values in the array, or make it a slice!
    // 配列中の値を変更してみましょう。または、スライスにしてみましょう。
    let array = [1, -2, 6];

    match array {
        // Binds the second and the third elements to the respective variables
        // 2番目と3番目の要素を変数にバインドする。
        [0, second, third] =>
            println!("array[0] = 0, array[1] = {}, array[2] = {}", second, third),

        // Single values can be ignored with _
        // _で値を無視できる。
        [1, _, third] => println!(
            "array[0] = 1, array[2] = {} and array[1] was ignored",
            third
        ),

        // You can also bind some and ignore the rest
        // いくつかの値をバインドして残りを無視できる。
        [-1, second, ..] => println!(
            "array[0] = -1, array[1] = {} and all the other ones were ignored",
            second
        ),
        // The code below would not compile
        // 以下のコードはコンパイルできない。
        // [-1, second] => ...

        // Or store them in another array/slice (the type depends on
        // that of the value that is being matched against)
        // 別の配列やスライスに値を持たせることもできます。
        // (配列かスライスかは、マッチする値の型により異なります)
        [3, second, tail @ ..] => println!(
            "array[0] = 3, array[1] = {} and the other elements were {:?}",
            second, tail
        ),

        // Combining these patterns, we can, for example, bind the first and
        // last values, and store the rest of them in a single array
        // 例えば、これらのパターンを組み合わせて、
        // 最初と最後の値をバインドし、残りの値を配列に持たせることもできます。
        [first, middle @ .., last] => println!(
            "array[0] = {}, middle = {:?}, array[2] = {}",
            first, middle, last
        ),
    }
}

参照

配列とスライス、@マークについてはバインディング