Vector 如何从可变向量克隆最后一个元素,然后将值推送到Rust中的向量?
如何从可变向量克隆最后一个元素,然后将值推送到Rust中的向量Vector 如何从可变向量克隆最后一个元素,然后将值推送到Rust中的向量?,vector,rust,borrowing,Vector,Rust,Borrowing,如何从可变向量克隆最后一个元素,然后将值推送到Rust中的向量 fn ElementsFromPoint(&self, ...) -> Vec<Root<Element>> { let mut elements: Vec<Root<Element>> = self.elements_from_point(point).iter() .map(|&untrusted_node_addr| {...}).
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
}
而且
let last_element = elements.last().map(|t| t.clone()).unwrap();
但还是失败了
另外,.cloned()
尚未为根目录实现
有没有办法从可变向量克隆最后一个元素,然后将值推送到Rust中的向量?或者我应该先实现克隆的特征吗?试试这个
fn ElementsFromPoint(&self, ...) -> Vec<Root<Element>> {
let mut elements: Vec<Root<Element>> = self.elements_from_point(point).iter()
.map(|&untrusted_node_addr| {...}).collect();
if let Some(root_element) = self.GetDocumentElement() {
if {
match elements.last() {
Some(last_element) => *last_element != root_element,
None => true
}
} {
elements.push(root_element);
}
}
elements
}
fn元素自点(&self…)->Vec{
让mut元素:Vec=self.elements_from_point(point.iter())
.map(|&不受信任的_节点|{…}).collect();
如果让某些(根元素)=self.GetDocumentElement(){
如果{
匹配元素。最后(){
Some(last_元素)=>*last_元素!=根元素,
无=>true
}
} {
元素。推(根元素);
}
}
元素
}
在if
条件下使用block的绝妙技巧。实际上,clone()
在这里什么也不做,unwrap()
在元素
为空的情况下会引起恐慌。我建议使用:if elements.last().map(|x |*x!=root_元素)。unwrap_或(true){elements.push(root_元素)}
@aSpex我刚刚从question中复制了代码,没有其他更改或意见,但您绝对正确。
let last_element = elements.last().map(|t| t.clone()).unwrap();
fn ElementsFromPoint(&self, ...) -> Vec<Root<Element>> {
let mut elements: Vec<Root<Element>> = self.elements_from_point(point).iter()
.map(|&untrusted_node_addr| {...}).collect();
if let Some(root_element) = self.GetDocumentElement() {
if {
match elements.last() {
Some(last_element) => *last_element != root_element,
None => true
}
} {
elements.push(root_element);
}
}
elements
}