看 rust 文档遇到的一个所有权问题
来源:7-2 Rust中的所有权

小学生6年级
2021-12-01
fn largest<T: PartialOrd>(list: &[T]) -> T {
let mut largest = list[0];
for &item in list.iter() {
if item > largest {
largest = item;
}
}
largest
}
其中一个报错就是
error[E0508]: cannot move out of type `[T]`, a non-copy slice
--> src/main.rs:2:23
|
2 | let mut largest = list[0];
| ^^^^^^^
| |
| cannot move out of here
| help: consider using a reference instead: `&list[0]`
我的问题就是,为什么这里会期望用 move 语义,而不是简单的所有权变更呢? 例如 largest 直接获取到了列表第一个元素的所有权。list 不再拥有这个元素的所有权。当然如果这样子实现的话会很怪异,我只是有点好奇。还是说有什么内置的规则顺序呢?
写回答
2回答
-
叶枭
2021-12-08
在原始列表还存在的时候, 你不能从列表中拿走一个元素的所有权, 因为这个元素的所有者是这个列表. 只有一种情况可以从列表拿走元素的所有权, 就是在你拿走元素后列表不再被使用.
00 -
叶枭
2021-12-01
在 let mut largest = list[0]; 获得所有权后, 下一步的代码是 for &item in list.iter() {;
list 已经不拥有第一个元素的所有权了, 因此你不能再对 list 进行迭代.
012021-12-01
相似问题