相关疑难解决方法(0)

为什么Rust需要明确的生命周期?

我正在阅读Rust书的生命周章,我在这个例子中看到了命名/显式生命周期:

struct Foo<'a> {
    x: &'a i32,
}

fn main() {
    let x;                    // -+ x goes into scope
                              //  |
    {                         //  |
        let y = &5;           // ---+ y goes into scope
        let f = Foo { x: y }; // ---+ f goes into scope
        x = &f.x;             //  | | error here
    }                         // ---+ f and y go out of scope
                              //  |
    println!("{}", x);        //  |
}                             // -+ x goes out …
Run Code Online (Sandbox Code Playgroud)

static-analysis reference lifetime rust

183
推荐指数
7
解决办法
2万
查看次数

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

在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
查看次数

什么是终身省略,用非常简单的术语?

来自Rust文档:

Rust在函数体中支持强大的本地类型推断,但它故意不对项目签名的类型执行任何推理.然而,出于人体工程学的原因,在判断寿命时,确实应用了一种非常有限的二次推理算法,称为"终身省略".终身省略仅涉及使用三个易于记忆和明确的规则来推断寿命参数.这意味着终身省略作为编写项目签名的简写,而不是隐藏所涉及的实际类型,如果应用于完整的局部推断.

我不明白这意味着什么.什么是项目签名?"推断寿命参数"是什么意思?一些例子或类比会有所帮助.

lifetime rust

8
推荐指数
1
解决办法
697
查看次数

标签 统计

lifetime ×3

rust ×3

reference ×1

static-analysis ×1