rust - 为什么我的 rust 函数会出现“返回引用当前函数拥有的数据的值”错误?
问题描述
我知道我不能从函数返回借来的值,但我不知道如何解决它。这是我的功能:
pub fn query(&self, sql: &str, params: &[&dyn ToSql]) -> Result<ResultSet<Row>, Error> {
let pool = self.pool.clone();
let con = pool.get().unwrap();
let rows = con.query(sql, params).unwrap();
Ok(rows)
}
这是错误:
error[E0515]: cannot return value referencing local variable `con`
--> BloodTranslate\src\my_db\oracle_mod.rs:62:9
|
61 | let rows = con.query(sql,params).unwrap();
| --- `con` is borrowed here
62 | Ok(rows)
| ^^^^^^^^ returns a value referencing data owned by the current function
非常感谢 !!!
解决方案
有一个完整的ResultSet
类型ResultSet<'a, Row>
,所以由于绑定到生命周期,你根本无法返回它'a
。但是您可以将其转换为您喜欢的拥有类型,例如向量:
pub fn query(&self, sql: &str, params: &[&dyn ToSql]) -> Result<Vec<Row>, Error> {
let pool = self.pool.clone();
let con = pool.get().unwrap();
let rows = con.query(sql, params).unwrap();
rows.into_iter().collect()
}
请注意,例如,如果您只需要一行,则涉及额外的分配并且可能是多余的。
推荐阅读
- android - 使用相机2。当我调用 closeCamera 时,显示最后看到的帧而不是黑屏
- elasticsearch - 即使在设置 request_cache=true 之后,我也没有看到代价高昂的 ES 查询的性能提升
- python-3.x - 如何从 html 报告中删除跳过的测试
- java - 基于用户输入的日历打印问题
- fpdf - 在 codeIgniter 4 中集成 FPDF:库和控制器
- memory - Redis 与纯内存相比有多快?使用 Redis 而不是纯内存的优缺点
- powershell - 使用 Powershell 启用 Exchange Online SMTP 客户端身份验证
- python-3.x - 如何在 Python 中隐藏 Mayavi 表面后面的线条?
- powershell - 从 csv 文件 POWERSHELL 在 CC 中添加许多地址
- transparency - 用于 i3 选项卡式/堆叠模式中透明度的 compton 配置