serde 反序列化泛型的 "borrowed value does not live long enough" 编译器错误
A "borrowed value does not live long enough" compiler error for serde Deserialize generic
为什么 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()
签名是什么?
我找到了答案:DeserializeOwned
似乎就是为了这个目的而提供的——避免一生都需要。
我想在 f2()
中没有办法提供更短的生命周期,但是 f1()
不知何故没有这样的限制。
为什么 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()
签名是什么?
我找到了答案:DeserializeOwned
似乎就是为了这个目的而提供的——避免一生都需要。
我想在 f2()
中没有办法提供更短的生命周期,但是 f1()
不知何故没有这样的限制。