我在组合两个字符串时遇到了麻烦,我很生锈,所以如果有更简单的方法,请随时给我看看.
我的函数循环遍历字符串元组的向量(String,String),我想要做的是能够将这两个字符串元素组合成一个字符串.这就是我所拥有的:
for tup in bmp.bitmap_picture.mut_iter() {
let &(ref x, ref y) = tup;
let res_string = x;
res_string.append(y.as_slice());
}
Run Code Online (Sandbox Code Playgroud)
但我收到错误:error: cannot move out of dereference of '&'-pointer对于该行:res_string.append(y.as_slice());
我也尝试了res_string.append(y.clone().as_slice());但是发生了完全相同的错误,所以我不确定这是否正确.
append的函数定义是:
fn append(self, second: &str) -> String
Run Code Online (Sandbox Code Playgroud)
plain self表示按值语义.除非接收器实现Copy(String不支持),否则按值将接收器移动到方法中.所以你必须克隆x而不是y.
如果你想移出一个向量,你必须使用move_iter.
还有一些其他改进可能:
let string_pairs = vec![("Foo".to_string(),"Bar".to_string())];
// Option 1: leave original vector intact
let mut strings = Vec::new();
for &(ref x, ref y) in string_pairs.iter() {
let string = x.clone().append(y.as_slice());
strings.push(string);
}
// Option 2: consume original vector
let strings: Vec<String> = string_pairs.move_iter()
.map(|(x, y)| x.append(y.as_slice()))
.collect();
Run Code Online (Sandbox Code Playgroud)