创建一个新的& str

时间:2014-10-28 15:45:45

标签: rust

我想映射一个str的向量,以便它再现其他值:

let v = vec!["str1", "str2", "str3", "str4"]
let res = v.map_in_place(|x| x + "__") // error: binary operation `+` cannot be applied to type `&str`

请注意,我不需要更改 x,我需要通过添加新的字符串文字来创建 &str x。我怎么能这样做?

2 个答案:

答案 0 :(得分:3)

您需要先将x转换为String,然后才能+ x.to_string() + "__",但是,您的代码还有另一个问题:

此处v的类型为Vec<&str>map_in_place期望结果类型的类型与原始类型的大小(和对齐方式)相同,且大小为{ {1}}与&str不同,因此在运行时失败 - Demo

要使这项工作有以下几种可能的变化:

如果您真的想使用String,可以将map_in_place声明为:

v

Demo

另一种方法是使用let v = vec!["str1".to_string(), "str2".to_string(), "str3".to_string(), "str4".to_string()]; ,它会在创建新矢量后立即释放原始矢量。

into_iter().map(...).collect()

输出:

fn main() {
    let v = vec!["str1", "str2", "str3", "str4"];
    let res = v.into_iter().map(|x| x.to_string() + "__").collect::<Vec<_>>();
    println!("{}", res);
}

Demo

答案 1 :(得分:2)

问题是内存必须由某人拥有。在你的文字的情况下,他们直接写入你的二进制文件。但是当你想要将两个文字加在一起时,这是行不通的。您将需要制作一些String来表示实际拥有的结构,然后如果您真的想要使用切片矢量,请从该矢量中创建一个。这有意义吗?