我想实现一个类似于标准库定义的debug builders的构建器.它们是使用如下 struct 定义的:

struct DebugFoo<'a, 'b: 'a> {
    fmt: &'a mut std::fmt::Formatter<'b>
}

因为我不明白表格<'a, 'b: 'a>的意思,也找不到铁 rust 书或铁 rust 参考文献中提到的表格(至少是关于生命周期 的),我只是试图删除我不明白的内容,看看会发生什么:

struct DebugFoo<'a, 'b> {
    fmt: &'a mut std::fmt::Formatter<'b>
}

编译它时,我会遇到以下错误:

in type `&'a mut core::fmt::Formatter<'b>`, reference has a longer 
lifetime than the data it references

这张便条:

the pointer is valid for the lifetime 'a as defined on the struct at 1:0
but the referenced data is only valid for the lifetime 'b as defined on
the struct at 1:0

这对我来说很有意义:'a'b是不同的生命周期,所以,为了安全起见,Rust (借书判断?)假设'a'b长寿,并抛出错误.

现在我可以猜<'a, 'b: 'a>意味着'b的生命周期 必须比'a的生命周期 长.我猜对了?还是还有更多?我怎样才能找到文件?

推荐答案

冒号的意思是"超过生命周期 ",所以

'long: 'short

上面写着"'long'short长寿".

至于关于这个话题的官方文件,到目前为止,我唯一看到它被记录在案的地方就是RFC on lifetime bounds个地方.

Rust相关问答推荐

将已知大小的切片合并成一个数组,

Rust:跨多个线程使用hashmap Arc和rwlock

将大小为零的类型实例存储到空指针中

当一个箱子有自己的依赖关系时,两个人如何克服S每箱1库+n箱的限制?

Box::new()会从一个堆栈复制到另一个堆吗?

如何编写一个以一个闭包为参数的函数,该函数以另一个闭包为参数?

如何点击()迭代器?

如何使用RefCell::JOYMOMTborrow 对 struct 不同字段的可变引用

在Rust中判断编译时是否无法访问

在Rust 中移动原始指针的靶子安全吗

在 Rust 中用问号传播错误时对类型转换的困惑?

如何使用tracing-subscriberRust crate 构建多编写者、全局过滤订阅者

tokio::spawn 有和没有异步块

OpenGL 如何同时渲染无纹理的四边形和有纹理的四边形

仅当函数写为闭包时才会出现生命周期错误

判断 is_ok 后重用结果

使用 HashMap 条目时如何避免字符串键的短暂克隆?

Rustfmt 是否有明确类型的选项?

在 Rust 中退出进程

在 Traits 函数中设置生命周期的问题