由于需求冲突,无法为生命周期参数“de”推断合适的生命周期

Pau*_*erg 2 lifetime rust

采用以下代码片段(必须在货物中运行,以便您可以将serde功能添加到num-bigint):

use num_bigint::BigInt;
use serde_derive::Deserialize;
use std::collections::HashMap;

#[derive(Debug, Deserialize)]
pub struct Trade<'a> {
    pub id: &'a str,
    pub price: BigInt,
    pub quantity: BigInt,
}

#[derive(Debug, Deserialize)]
pub struct TradeTable<'a> {
    pub trades: Vec<Trade<'a>>,
}

fn main() {
    let mut ether_trades: Vec<Trade> = Vec::new();
    ether_trades.push(Trade {
        id: "#1",
        price: BigInt::from(100),
        quantity: BigInt::from(2)
    });

    let mut trades: HashMap<&str, Vec<Trade>> = HashMap::new();
    trades.insert("ETH", ether_trades);
    println!("trades: {}", trades);
}
Run Code Online (Sandbox Code Playgroud)

编译时会出现此错误:

error[E0495]: cannot infer an appropriate lifetime for lifetime parameter `'de` due to conflicting requirements
Run Code Online (Sandbox Code Playgroud)

还有这个注意事项:

note: first, the lifetime cannot outlive the lifetime `'de` as defined on the impl at 34:17...
Run Code Online (Sandbox Code Playgroud)

现在,我明白我需要'a缩短寿命'de,但我该怎么做呢?我不知道'de生命周期在哪里定义。我尝试使用这样的冒号:

error[E0495]: cannot infer an appropriate lifetime for lifetime parameter `'de` due to conflicting requirements
Run Code Online (Sandbox Code Playgroud)

但这没有用。

Max*_*axV 6

请检查那个

TL; 博士

#[derive(Debug, Deserialize)]
pub struct TradeTable<'a> {
    #[serde(borrow)]
    pub trades: Vec<Trade<'a>>,
}
Run Code Online (Sandbox Code Playgroud)

  • 如果[您怀疑某些内容重复](/sf/ask/4255588501/?noredirect=1#评论107604126_60794121),请勿回复。相反,投票将其作为重复项关闭。 (3认同)