my_function
是一个签名为fn my_function(pos: &str) -> String
的函数
fn main() {
let mut my_str = "A";
for _i in 0..1000 {
my_str = my_function(my_str).as_str();
}
println!("{:?}", my_str);
}
我一直在尝试实现这种模式,但我得到一个错误temporary value is freed at the end of this statement
链接到Rust Playground
将字符串存储在循环之外:
fn main() {
let mut my_str = "A";
let mut owner: String;
for _ in 0..1000 {
owner = my_function(my_str);
my_str = owner.as_str();
}
println!("{:?}", my_str);
}
kmdreko的答案需要额外的初始分配,Aloso的答案需要一个单独的变量来拥有String
,两者都是很好的答案。但是为了完整起见,如果您的变量确实需要有时指向借来的数据,有时指向自己的数据,您可以使用Cow
(写时复制的缩写):
use std::borrow::Cow;
fn main() {
let mut my_str = Cow::Borrowed("A");
for _ in 0..1000 {
my_str = Cow::Owned(my_function(&my_str));
}
println!("{:?}", my_str.as_ref());
}
我建议一直使用String
:
fn main() {
let mut my_str = "A".to_string();
for _i in 0..1000 {
my_str = my_function(&my_str);
}
println!("{:?}", my_str);
}