再论元组

当元组内所有的元素都是Copy的,则元组在解构时就是会被整体copy。

fn main() {
    let tuple: (u32,u32) = (5,5);
    let (x,y) = tuple;
    println!("(x,y) = {},{}  Tuple is: {:?}", x,y,tuple);  // 打印:(x,y) = 5,5  Tuple is: (5, 5)
}

当元组内有一个元素是非Copy的,则元组内的值在解构时就会被move掉,元组失效。

fn main() {
    let tuple: (u32, String) = (5, String::from("five"));
    let (x, s) = tuple;
    println!("Tuple is: {:?}", tuple);  // 以下行将导致编译错误,因为String类型并未实现Copy, 所以tuple被整体move掉。
}

若使用 _ 忽略掉非Copy的元素,则元组的解构时还是会copy需要的值。

fn main() {
    let tuple: (u32, String) = (5, String::from("five"));
    let (x, _) = tuple;
    println!("Tuple is: {:?}", tuple);  // tuple没有被move。依然可以使用。
}

results matching ""

    No results matching ""