首页 > 解决方案 > 为什么我的 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

非常感谢 !!!

标签: rust

解决方案


有一个完整的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()
}

请注意,例如,如果您只需要一行,则涉及额外的分配并且可能是多余的。


推荐阅读