rust - 错误[E0515]:无法返回引用临时值的值
问题描述
我正在尝试从 SQL 查询中读取结果,遍历返回的Vector
,并将其Row
转换为域对象。我通过引用传递行,所以我不确定从函数返回的临时值在哪里。
我在这里做错了什么?
use postgres::{Client, Error, Row}; // 0.17.1
#[derive(Debug)]
pub struct SomeTable<'a> {
id: i32,
value: &'a str,
}
impl SomeTable<'_> {
pub fn new(row: &Row) -> Result<SomeTable, Error> {
let id_value: i32 = match row.try_get(0) {
Ok(n) => n,
Err(e) => return Err(e),
};
let some_value: &str = match row.try_get(1) {
Ok(n) => n,
Err(e) => return Err(e),
};
Ok(SomeTable {
id: id_value,
value: some_value,
})
}
}
pub fn get_values(client: &mut Client, value: String) -> Result<Vec<SomeTable>, Error> {
let mut vec = Vec::new();
let results = client
.query("select * from some_table where value=$1", &[&value])?
.iter();
for row in results {
let details = SomeTable::new(&row)?;
vec.push(details);
}
Ok(vec)
}
我不断收到此错误
error[E0515]: cannot return value referencing temporary value
--> src/lib.rs:40:5
|
31 | let results = client
| ___________________-
32 | | .query("select * from some_table where value=$1", &[&value])?
| |_____________________________________________________________________- temporary value created here
...
40 | Ok(vec)
| ^^^^^^^ returns a value referencing data owned by the current function
解决方案
推荐阅读
- intellij-idea - IntelliJ Idea git 弄乱了存储库。如何避免?
- homebrew - 在每次安装中“Apple 无法检查它是否存在恶意软件”
- wordpress - 如何将组权限授予 WordPress
- html - 如何使占位符在选择中始终可见?
- autodesk-forge - 小地图不显示 2D 视图
- python - Scrapy 和网络爬虫
- css - 可滚动的 Inner Div 内部的 ion 内容
- javascript - MongoDb 在控制台中显示结果,但不在浏览器中
- sql - SQL查询以最少使用JOINS获取元素的祖父-父-子关系
- ios - UICollectionView CompositionalLayout 中的部分标题 zIndex - iOS 13