【发布时间】:2021-12-11 03:35:46
【问题描述】:
为什么f1() 可以编译而f2() 不可以?
fn f1() {
let s_json = "[]".to_string();
for i in 0..10 {
let ve: Vec<Rec1> = serde_json::from_str(&s_json).unwrap();
}
}
fn f2<'a, T: Deserialize<'a>>() {
let s_json = "[]".to_string();
for i in 0..10 {
let ve: Vec<T> = serde_json::from_str(&s_json).unwrap();
}
}
这是编译器的输出:
| fn fff2<'a, T: Deserialize<'a>>() {
| -- lifetime `'a` defined here
...
| let ve: Vec<T> = serde_json::from_str(&s_json).unwrap();
| ---------------------^^^^^^^-
| | |
| | borrowed value does not live long enough
| argument requires that `s_json` is borrowed for `'a`
| }
| }
| - `s_json` dropped here while still borrowed
我做错了什么?正确的f2() 签名是什么?
【问题讨论】:
-
你不能写
let s_json = "[]"; ... serde_json::from_str(s_json)吗?还是您的真实 JSON 值比文字“[]”更有趣?
标签: rust lifetime borrow-checker