相关疑难解决方法(0)

何时在结构中定义多个生命周期是有用的?

在Rust中,当我们想要一个包含引用的结构时,我们通常会定义它们的生命周期:

struct Foo<'a> {
    x: &'a i32,
    y: &'a i32,
}
Run Code Online (Sandbox Code Playgroud)

但是也可以为同一结构中的不同引用定义多个生命周期:

struct Foo<'a, 'b> {
    x: &'a i32,
    y: &'b i32,
}
Run Code Online (Sandbox Code Playgroud)

什么时候这样做有用?有人可以提供一些示例代码,这些代码在两个生命周期都'a没有编译但是在生命周期时编译'a并且'b(反之亦然)?

lifetime rust

30
推荐指数
3
解决办法
1759
查看次数

是否有可能有一个结构包含对生命周期比结构短的值的引用?

这是我要存档的简化版本:

struct Foo<'a> {
    boo: Option<&'a mut String>,
}

fn main() {
    let mut foo = Foo { boo: None };
    {
        let mut string = "Hello".to_string();
        foo.boo = Some(&mut string);
        foo.boo.unwrap().push_str(", I am foo!");
        foo.boo = None;
    } // string goes out of scope. foo does not reference string anymore

} // foo goes out of scope
Run Code Online (Sandbox Code Playgroud)

这显然是完全安全的,foo.booNone一次string去的范围了。

有没有办法告诉编译器?

struct lifetime rust

4
推荐指数
1
解决办法
734
查看次数

标签 统计

lifetime ×2

rust ×2

struct ×1