gpt4 book ai didi

memory-management - 当使用将在函数末尾删除的字符串调用时,如何返回 serde_json::from_str 的结果?

转载 作者:行者123 更新时间:2023-11-29 08:06:16 24 4
gpt4 key购买 nike

我在一个函数中有一个新分配的 String,我需要创建一个从 String 借用 &str 的派生对象,然后返回给定的对象。

我知道我的代码是错误的,因为 String 的生命周期是函数的生命周期,因此派生对象将永远不会因为悬挂引用而返回。

这里惯用的解决方案是什么?我无法更改 serde_json::from_str

的签名
#[inline]
pub fn get_object<'a, T>(json_data: &'a Value, path: &[&str]) -> Option<T>
where T: serde::Deserialize<'a>
{
let mut pointer_str = String::new();
for entry in path.iter() {
pointer_str = format!("{}/{}", pointer_str, entry);
}

let child = json_data.pointer(&pointer_str).unwrap().to_string();

let result = serde_json::from_str(&child).ok();
return result;
}

错误:

error: `child` does not live long enough
--> src/lib.rs:88:40
|
88 | let result = serde_json::from_str(&child).ok();
| ^^^^^ does not live long enough
89 | return result;
90 | }
| - borrowed value only lives until here

最佳答案

惯用的解决方案是:

  • T 实现 DeserializeOwned
  • 有两种方法,一种是创建字符串,一种是反序列化,并保证反序列化后的结果存储时间大于T

当然,前者要容易得多。

关于memory-management - 当使用将在函数末尾删除的字符串调用时,如何返回 serde_json::from_str 的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44178168/

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