我不断收到错误“使用移动的值”。
let mut s = "s".to_string();
s = s + &s;
答案 0 :(得分:3)
考虑+
desugars:
s = s.add(&s);
现在这个add
是from the Add
trait,实际上是这样的:
fn add(self: String, rhs: &str) -> String;
self
的使用意味着它取得了字符串的所有权;你显然不能将对它的引用作为第二个参数传递,因为它不再是你的了。
你可能会认为这样做很好,但事实并非如此;整个类是不健全的,构成可变别名 - 同时存在对同一事物的可变和不可变引用。对于这种特殊情况,我认为如果允许则会出现错误的一种方法是,如果字符串推送是重新分配字符串;然后,rhs
可能会在实际使用它时指向不存在的内存。
答案 1 :(得分:3)
为Chris Morgan的答案添加解决方案:
let s = "s";
let mut double_s = s.to_owned(); // faster, better than to_string()
double_s = double_s + s;
您也可以使用
double_s.push_str(s);
而不是最后一行。