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
没有。如果是这样的话,这可能是一艘班轮。