再论元组
当元组内所有的元素都是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。依然可以使用。
}