gpt4 book ai didi

rust - s 生命周期不够长 : borrowed value does not live long enough;

转载 作者:行者123 更新时间:2023-12-05 03:17:44 24 4
gpt4 key购买 nike

我是 Rust 的新手,当使用 split 然后分配给 var 时,它会出现以下问题。

use std::io;

fn main() {
let mut prev_key: &str = "";

for line in io::stdin().lines(){
let s = line.unwrap();
let data: Vec<&str> = s.split("\t").collect::<Vec<_>>();
if prev_key.len() == 0 {
prev_key = data[0];
}
}
}

错误是:

error[E0597]: s does not live long enough
--> src/reducer.rs:8:31
|
8 | let data: Vec<&str> = s.split("\t").collect::<Vec<_>>();
| ^^^^^^^^^^^^^ borrowed value does not live long enough
9 | if prev_key.len() == 0 {
| -------------- borrow later used here
...
12 | }
| - s dropped here while still borrowed

最佳答案

您可能不想使用字符串切片,而是使用普通的 String

let mut prev_key: String = String::from("");

for line in io::stdin().lines() {
let s = line.unwrap();
let data: Vec<&str> = s.split("\t").collect::<Vec<_>>();
if prev_key.len() == 0 {
prev_key = data[0].to_owned();
}
}

s 的范围仅在for 循环内。 data 包含 s 的字符串切片,您不能将其直接分配给 prev_key,因为 prev_key 长for 循环。因此,使用 to_owned() 创建 data[0] 的副本解决了分配问题。

关于rust - s 生命周期不够长 : borrowed value does not live long enough;,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73993900/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com