【发布时间】:2021-12-07 09:02:17
【问题描述】:
我是 rust 初学者(但经验丰富的程序员),我正在尝试创建一个简单的实用程序函数来从 json 文件中读取数据,并且显然缺少重要的 rust 理解来实现它。我环顾四周,但我无法解决其他生锈问题。我正在尝试做这样的事情:
pub fn read_data_from_json<'a, T: Deserialize<'a>, P: AsRef<Path>>(path: P) -> T {
let result = std::fs::read_to_string(path).unwrap();
return serde_json::from_str(&result).unwrap();
}
问题是我想为serde_json::from_str() 提供它需要的&str,但从读取文件中获得String。所以 rust 编译器说:
40 | return serde_json::from_str(&result).unwrap();
| ---------------------^^^^^^^-
| | |
| | borrowed value does not live long enough
原因显然是result 变量在from_str() 完成值之前被删除,但我无法获得“只是切片”的值。我已经尝试过as_str()、&*、&'static str 和其他几个选项来尝试完成这项工作,但我显然遗漏了一些东西,因为它似乎是一个基本的用例。我必须承认我对“生命周期”和所涉及的泛型仍然有些模糊,所以问题可能就在那里。
【问题讨论】:
-
此文档页面非常准确地呈现了您的情况:docs.serde.rs/serde/de/trait.DeserializeOwned.html