当我阅读有关泛型的Rust文档时,我发现了一个关于所有权的怪异问题。查看以下代码段:
fn main() {
let number_list = vec![34, 50, 25, 100, 65];
let mut largest = number_list[0];
for number in number_list {
if number > largest {
largest = number;
}
}
println!("The largest number is {}", largest);
}
为什么不largest
拥有向量的第一个元素的所有权?我发现在上一章关于vector的文章中,使用借位语法let largest = &v[0]
将获取元素的所有权。为什么此代码通过编译器?
许多原始类型实现了Copy
特征-这意味着当您将它们绑定到其他变量时,它们会被复制。复制值时不存在所有权问题。
这只是出于演示目的,并不是很实用...但是,如果您将示例更改为使用简单的哑结构,则会发现它不再起作用(因为它没有实现Copy
):
#[derive(Debug, PartialEq)]
struct S;
fn main() {
let number_list = vec![S, S, S, S];
let mut largest = number_list[0];
for number in number_list {
if number == largest {
largest = number;
}
}
println!("The largest number is {:?}", largest);
}
但是,如果您实现Copy
(和Clone
),它将运行良好:
#[derive(Clone, Copy, Debug, PartialEq)]
struct S;
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句