在按值获取自我的方法调用中,是否有更短的附加到向量的方法?

Is there a shorter way of appending to a vector in a method call that takes self by value?

我需要将 Bar 附加到 Foo 作为向量。这个解决方案对我有用:

trait AppendBar {
    fn append_bar(self) -> Self;
}

impl AppendBar for Vec<String> {
    fn append_bar(self) -> Vec<String> {
        let mut v = self;
        v.push("Bar".to_string());
        v
    }
}

fn main(){
    let foo = vec![String::from("Foo")].append_bar();
    println!("{:#?}", foo)
    
}

我可以这样做吗:

impl AppendBar for Vec<String> {
    fn append_bar(self) -> Vec<String> {
        let mut v = self.push("Bar".to_string());
        v
    }
}

或者这样:

impl AppendBar for Vec<String> {
    fn append_bar(self) -> Vec<String> {
        self.push("Bar".to_string())
    }
}

由于我无法通过最后 2 次尝试中的任何一次来编译它,我认为这就是语言的样子,但我想确保我没有遗漏任何东西以使其更简单。

无需将 self 重新绑定到 v 即可实现可变性。只需将其声明为 mut self:

fn append_bar(mut self) -> Vec<String> {
    self.push("Bar".to_string());
    self
}

除此之外,没有用于链接修改的标准 Vec 方法(使用 self 并返回修改后的版本),几乎所有方法都将 Vec 就地修改为 &mut self.