Rust 如何转移字符串的所有权?
我是新生锈的人,曾几次遇到类似以下问题:Rust 如何转移字符串的所有权?,rust,Rust,我是新生锈的人,曾几次遇到类似以下问题: fn main() { let mut as_str: Vec<&String> = Vec::new(); for i in [1, 2, 3, 4, 5].iter() { let i_str = i.to_string(); as_str.push(&i_str); } } fn main(){ 设mut为_str:Vec=Vec::new(); 对于[1,2,3
fn main() {
let mut as_str: Vec<&String> = Vec::new();
for i in [1, 2, 3, 4, 5].iter() {
let i_str = i.to_string();
as_str.push(&i_str);
}
}
fn main(){
设mut为_str:Vec=Vec::new();
对于[1,2,3,4,5]中的i.iter(){
设i_str=i.to_string();
as_str.push(&i_str);
}
}
这将产生以下错误:
<anon>:6:22: 6:27 error: `i_str` does not live long enough
<anon>:6 as_str.push(&i_str);
^~~~~
:6:22:6:27错误:'i_str'活得不够长
:6 as_str.push(&i_str);
^~~~~
如何将字符串的所有权转移到向量(不希望复制)?我需要一辈子吗?它应该是一个str还是一个字符串(假设我不想改变向量中的项目本身)?给向量一个
字符串,而不是一个引用。拥有Foo
,借用&Foo
fn main() {
let mut as_str: Vec<String> = Vec::new();
for i in [1, 2, 3, 4, 5].iter() {
let i_str = i.to_string();
as_str.push(i_str);
}
}
您可能会使用map
将事物的一部分转换为另一部分:
fn main() {
let as_str: Vec<_> = [1, 2, 3, 4, 5].iter().map(|i| i.to_string()).collect();
}
fn main(){
让as_str:Vec=[1,2,3,4,5].iter().map(|i | i.to_string()).collect();
}
顺便说一句,使用&String
;您也可以使用&str
来确保字符串被移动而不是复制,这样正确吗?是否必须显式地在Rust中复制(与C++不同)?让as|str:Vec=(1..6)。map(|i | i.to_string()).collect()是实现OP的另一种方法。
fn main() {
let as_str: Vec<_> = [1, 2, 3, 4, 5].iter().map(|i| i.to_string()).collect();
}