我正在编写以下格式的函数:
fn pop(data: &mut Vec<Option<T>>) -> Option<T> {
// Let the item be the current element at head
let item = data[0];
// and "remove" it.
data[0] = None;
item
}
Run Code Online (Sandbox Code Playgroud)
当我尝试这样做时,我得到一个"无法移出索引内容"错误,这是有道理的.当我试图改变它,从而item是一个参考,我得到一个错误,当我尝试设置data[0]到None,这也是情理之中.
有什么方法可以做我想做的事吗?在我看来,无论我是否想要返回引用,我都必须从Vec中获取该元素的所有权.
我注意到Vec有一个swap_remove方法,它几乎完全符合我的要求,除了它与Vec中已有的元素交换,而不是我想要的任意值.我知道我可以附加None到Vec的末尾并使用swap_remove,但我有兴趣看看是否还有另一种方法.
Fra*_*gné 12
use std::mem;
fn pop<T>(data: &mut Vec<Option<T>>) -> Option<T> {
mem::replace(&mut data[0], None)
}
Run Code Online (Sandbox Code Playgroud)
replace 实质上用另一个值替换特定位置的值并返回先前的值.