4
我寫以下格式的函數:我如何獲得Vec元素的所有權並將其替換爲其他元素?
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
}
當我嘗試這樣做,我得到一個「不能搬出索引內容」的錯誤,這是有道理的。當我嘗試將item
作爲參考進行更改時,當我嘗試將data[0]
設置爲None
時出現錯誤,這也是有道理的。
有什麼辦法可以做我想做的事嗎?在我看來,無論我是否想要返回一個參考,我都必須從Vec中獲取元素的所有權。
我注意到Vec有一個swap_remove
方法,它幾乎正是我想要的,除了它與已經在Vec中的元素進行交換,並沒有任何隨意的值。我知道我可以將None
附加到Vec的末尾,並使用swap_remove
,但我有興趣查看是否有其他方法。
太棒了,謝謝! –
順便說一句,爲了用'None'替換一個可選的值,'Option'上有一個特殊的方法,叫做['take()'](http://doc.rust-lang.org/core/option/enum.Option的.html#method.take)。我認爲在適用的情況下使用它而不是'replace()'更具慣用。 –