< 返回版块

WingDust 发表于 2021-12-12 18:58

Tags:vec

pub fn include_suffix(mut suffixs: Vec<&str>)->Vec<&str>{
  for suffix in suffixs.iter_mut() {
    *suffix = format!("{}{}","*",suffix).as_str();
  }
  suffixs
}

上面在VSCode中报

temporary value dropped while borrowed
creates a temporary which is freed while still in use
等

不知道是使用 format! 要注意的什么问题

评论区

写评论
c5soft 2021-12-13 09:05

最简洁的方法就是改一下函数的返回类型:

pub fn include_suffix(suffixes: Vec<&str>) -> Vec<String> {
    suffixes.iter().map(|x| format!("{}{}", "*", x)).collect()
}

fn main() {
    let suffixes = vec!["hello", "world", "!"];
    let suffixes = include_suffix(suffixes);
    println!("{:?}", suffixes);
}

作者 WingDust 2021-12-12 19:42

--
👇
munpf: 报错的意思是临时变量被销毁时仍被借用着。

format!()返回的是一个String,用as_str()会返回&str,这个引用指向format!()生成的临时String变量,在函数返回后,这个临时变量被销毁,&str指向了一个无效的内存地址,所以不能通过编译。你这个代码做的就是返回了临时变量的内存地址,你应该直接返回String,而不是&str。

能显示一下修改后代码吗

munpf 2021-12-12 19:20

报错的意思是临时变量被销毁时仍被借用着。

format!()返回的是一个String,用as_str()会返回&str,这个引用指向format!()生成的临时String变量,在函数返回后,这个临时变量被销毁,&str指向了一个无效的内存地址,所以不能通过编译。你这个代码做的就是返回了临时变量的内存地址,你应该直接返回String,而不是&str。

1 共 3 条评论, 1 页