如何将某些内容连接到字符串的前面?

时间:2015-08-31 03:02:08

标签: string rust string-concatenation

我不断收到错误“使用移动的值”。

let mut s = "s".to_string();
s = s + &s;

2 个答案:

答案 0 :(得分:3)

考虑+ desugars:

s = s.add(&s);

现在这个addfrom 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);

而不是最后一行。