作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想实现一个类似于调试 builders 的构建器由标准库定义。它们使用如下结构定义:
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
.我猜对了吗?或者还有更多?我怎样才能找到它的文档?
最佳答案
冒号读作“outlives”,所以
'long: 'short
读作“'long
比 'short
长”。
至于关于该主题的官方文档,到目前为止,我唯一看到的记录是在 RFC on lifetime bounds 中。 .
关于rust - <'a, ' b : 'a> mean that the lifetime ' b must outlive the lifetime 'a?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30768063/
我是一名优秀的程序员,十分优秀!