首页 > 解决方案 > 错误[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

标签: rust

解决方案


推荐阅读