gpt4 book ai didi

rust - 了解相关的生命周期

转载 作者:行者123 更新时间:2023-12-02 18:01:35 32 4
gpt4 key购买 nike

我如何告诉编译器一个生命周期必须长于另一个生命周期?

use serde::{Deserialize, Serialize};

#[derive(Serialize, Deserialize, Debug)]
pub struct Tokens<'a> {
buffer: String,
list: Vec<Token<'a>>,
}

#[derive(Serialize, Deserialize, Debug)]
pub struct Token<'a> {
term: &'a str,
}

产量

error: lifetime may not live long enough
--> src/pipeline/tokenizers/test.rs:6:5
|
3 | #[derive(Serialize, Deserialize, Debug)]
| ----------- lifetime `'de` defined here
4 | pub struct Tokens<'a> {
| -- lifetime `'a` defined here
5 | buffer: String,
6 | list: Vec<Token<'a>>,
| ^^^^ requires that `'de` must outlive `'a`
|
= help: consider adding the following bound: `'de: 'a`

在上面的代码中,token.term: &str 将始终引用一片 tokens.buffer。我不确定如何指定这种关系。我也不确定如何添加请求的边界。

这会起作用吗?如果是这样,神奇的语法是什么?

最佳答案

您可以使用属性#[serde(borrow)],它使生成的反序列化实现借用数据。

use serde::{Deserialize, Serialize};

#[derive(Serialize, Deserialize, Debug)]
pub struct Tokens<'a> {
buffer: String,
#[serde(borrow)]
list: Vec<Token<'a>>,
}

#[derive(Serialize, Deserialize, Debug)]
pub struct Token<'a> {
term: &'a str,
}

参见:

关于rust - 了解相关的生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74239949/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com