在按值获取自我的方法调用中,是否有更短的附加到向量的方法?
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
.
我需要将 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
.