【问题标题】:Does <'a, 'b: 'a> mean that the lifetime 'b must outlive the lifetime 'a?<'a, 'b: 'a> 是否意味着生命周期'b 必须比生命周期'a 长?
【发布时间】:2015-08-26 09:32:09
【问题描述】:

我想实现一个类似于标准库定义的调试builders的构建器。它们是使用如下结构定义的:

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

由于我不明白 &lt;'a, 'b: 'a&gt; 的形式是什么意思,也无法在 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 寿命长,并抛出错误.

现在我可以猜到&lt;'a, 'b: 'a&gt; 意味着生命周期'b 必须比生命周期'a 长。我猜对了?或者还有更多?我怎样才能找到它的文档?

【问题讨论】:

    标签: rust lifetime


    【解决方案1】:

    冒号读作“outlifes”,所以

    'long: 'short
    

    读作“'long'short更长寿”。

    至于有关该主题的官方文档,到目前为止,我看到的唯一记录的地方是RFC on lifetime bounds

    【讨论】:

      【解决方案2】:

      是的,你大体上是对的。

      绑定的&lt;...: 'a&gt; 意味着...(一个类型或另一个生命周期)需要能够比'a 寿命更长。例如。 'b: 'a 表示“'b 的寿命必须至少与'a 一样长”(但严格来说并不比寿命长:它们可以相同)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-10-07
        • 1970-01-01
        • 2021-04-08
        • 1970-01-01
        • 2012-08-18
        • 2014-03-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多