2
如何从可变的向量中克隆最后一个元素,然后将值推送到Rust中的向量?如何克隆可变向量中的最后一个元素,然后将值推送到Rust中的向量?
fn ElementsFromPoint(&self, ...) -> Vec<Root<Element>> {
let mut elements: Vec<Root<Element>> = self.elements_from_point(point).iter()
.map(|&untrusted_node_addr| {...}).collect();
let last_element = elements.last().clone().unwrap(); // elements.last() is Option<&Root<Element>>
if let Some(root_element) = self.GetDocumentElement() { //self.GetDocumentElement() is Option<Root<Element>>
if *last_element != root_element {
elements.push(root_element);
}
}
elements
}
的错误是
2620:17: 2620:25 error: cannot borrow `elements` as mutable because it is also borrowed as immutable [E0502]
2620 elements.push(root_element);
^~~~~~~~
2617:28: 2617:36 note: previous borrow of `elements` occurs here; the immutable borrow prevents subsequent moves or mutable borrows of `elements` until the borrow ends
2617 let last_element = elements.last().clone().unwrap();
^~~~~~~~
2626:6: 2626:6 note: previous borrow ends here
2590 fn ElementsFromPoint(&self, x: Finite<f64>, y: Finite<f64>) -> Vec<Root<Element>> {
...
2626 }
^
2625:9: 2625:17 error: cannot move out of `elements` because it is borrowed [E0505]
2625 elements
^~~~~~~~
2617:28: 2617:36 note: borrow of `elements` occurs here
2617 let last_element = elements.last().clone().unwrap();
我读过this并试图
let last_element = elements.last().unwrap().clone();
也
let last_element = elements.last().map(|t| t.clone()).unwrap();
,但还是失败了。
还有.cloned()
还没有为Root<T>
执行。
有没有办法克隆可变的向量中的最后一个元素,然后将值推送到Rust中的向量?或者我应该首先实施Cloned
特质?
酷,'if'块完美的作品!谢谢! – rilut
在'if'条件下块的好技巧。实际上'clone()'在这里什么都不做,''''''''''是空的时''unwrap()'可能导致恐慌。我会推荐使用: 'if elements.last()。map(| x | * x!= root_element).unwrap_or(true){elements.push(root_element)}' – aSpex
@aSpex我刚从问题中复制代码,改变或opimisations,但你是绝对正确的。 – qthree