Closed xxczxp closed 2 years ago
两种方案参考一下吧
// 改函数签名,但 `trait` 里的签名不用改
impl AppendBar for Vec<String> {
fn append_bar(mut self) -> Self {
self.push("Bar".to_string());
self
}
}
// 局部可变变量 shadow
impl AppendBar for Vec<String> {
fn append_bar(self) -> Self {
let mut ret = self;
ret.push("Bar".to_string());
ret
}
}
两种方法都没有发生 clone
,效率上来说基本上是一样的。
其实我怀疑就算是 clone
的写法也会被优化掉。
另外,贴代码最好使用 markdown 的代码块哦,这样排版更美观,也会加强他人回答的意愿。
@xxczxp 我把你格式改了。
@cxz888 说的对。self
只是一个变量名而已,就好像 c++ 里 this
只是个指针一样,当然可以直接在上面加个 mut
。
好的,感谢修改。 感谢回答,是我没有想到还有强大的编译器了。
Describe the question
问题来源是在学习rustlings时做trait2题时
需要实现一个函数,接受一个参数(发生所有权转移但不可变),对其进行一定的操作(发生改变),之后再返回,有除了clone以外的其他写法吗?感觉clone会带来额外的开销 又或者应该改变函数签名接受可变参数?