元组实现了 `Copy` 吗?

10
在Rust Book的第18章中,他们举了一个有关元组在模式匹配中的例子。
fn print_coordinates(&(x, y): &(i32, i32)) {
    println!("Current location: ({}, {})", x, y);
}

fn main() {
    let point = (3, 5);
    print_coordinates(&point);   // point passed as reference
}

出于好奇,我尝试了不使用引用传递的方式,就像这样。

fn print_coordinates((x, y): (i32, i32)) {
    println!("Current location: ({}, {})", x, y);
}

fn main() {
    let point = (3, 5);
    print_coordinates(point);   // point passed as value
    print_coordinates(point);   // point is still valid here
}

它编译并打印出坐标两次。

元组是否可以像其他原始数据类型(数字、布尔值等)一样传递到函数中?


1个回答

13

是的,根据文档,对于元素个数小于或等于12的元组,如下述条件成立:

如果元组中的每个类型都实现了以下任一特性,则该元组本身也实现它。

由于Rust类型系统中的临时限制,这些特性仅在元素个数小于或等于12的元组上实现。未来可能会发生变化。


感谢您的快速回答。 - Zarni Phyo
如果元数超过12,你的元组可能相当庞大,例如大小为12的i128已经占用了192个字节,因此尝试复制如此大的元组确实没有意义(更不用说首先不应该有这样巨大的元组;而应该使用数组代替)。 - SOFe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接