Vector 如何从可变向量克隆最后一个元素,然后将值推送到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| {...}).

如何从可变向量克隆最后一个元素,然后将值推送到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
}
而且

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
}