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

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,
}

yield 率

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:&amp;str将始终引用一段tokens.Buffer.我不确定该如何具体说明这种关系.我也不确定如何添加请求的绑定.

这会奏效吗?如果是这样的话,神奇的语法是什么?

推荐答案

您可以使用属性#[serde(borrow)],它使生成的Deserialize实现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相关问答推荐

在一个tauri协议处理程序中调用一个rectuc函数的推荐技术是什么?

如何在原始字符串中转义";#和#";

rust 蚀生命周期 行为

如果成员都实现特征,是否在多态集合上实现部分重叠的特征?

制作一片连续整数的惯用Rust 方法?

如何提高自定义迭代器的`extend`性能

在UdpSocket上使用sendto时的隐式套接字绑定

如何模拟/创建ReqData以测试Actix Web请求处理程序?

完全匹配包含大小写的整数范围(&Q;)

AXUM一路由多个不包括URL的参数类型

不能在Rust中使用OpenGL绘制三角形

Rust:为什么 Pin 必须持有指针?

在Rust中实现Trie数据 struct 的更好方式

如何在 Rust 中将 bson::Bson 转换为 Vec

为什么在 macOS / iOS 上切换 WiFi 网络时 reqwest 响应会挂起?

为什么我可以同时传递可变和不可变引用?

有没有办法隐藏类型定义?

编写 TOML 文件以反序列化为 struct 中的枚举

如何重写这个通用参数?

来自外部函数的future 内部可变引用