Vector 在按值获取self的方法调用中,是否有一种较短的方法附加到向量?

Vector 在按值获取self的方法调用中,是否有一种较短的方法附加到向量?,vector,methods,rust,traits,Vector,Methods,Rust,Traits,我需要将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());

我需要将
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)
    
}
{
fn附加_条(self)->self;
}
用于Vec的impl AppendBar{
fn附加_条(自)->Vec{
让mut v=self;
v、 推(“杆”。到_字符串());
v
}
}
fn main(){
让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
    }
}
Vec的impl AppendBar{
fn附加_条(自)->Vec{
让mut v=self.push(“Bar.to_string());
v
}
}
或者这个:

impl AppendBar for Vec<String> {
    fn append_bar(self) -> Vec<String> {
        self.push("Bar".to_string())
    }
}
Vec的impl AppendBar{
fn附加_条(自)->Vec{
self.push(“Bar.”to_string())
}
}

由于我无法用最后两次尝试中的任何一次来编译它,我假设这就是语言的方式,但我想确保我没有遗漏一些东西,使它更简单。

没有必要将
self
重新绑定到
v
,以实现可变性。只需将其声明为
mut self

fn append_bar(mut self) -> Vec<String> {
    self.push("Bar".to_string());
    self
}
fn附加条(mut self)->Vec{
self.push(“Bar.to_string());
自己
}

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

谢谢@kmdreko,看到这个答案就更清楚了。我不确定是否可以在函数签名中使用mut self,因为它没有在trait中声明。非常感谢。我从未探究过为什么
String
实现了
+
,但
Vec
没有。如果是这样的话,这可能是一艘班轮。