如何遍历接受str并返回String的函数



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);
}

最新更新