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 不再拥有这个元素的所有权。当然如果这样子实现的话会很怪异,我只是有点好奇。还是说有什么内置的规则顺序呢?