Rust 什么时候需要使用寿命?

Rust 什么时候需要使用寿命?,rust,Rust,我已经阅读了有关生命周期的内容,并了解到每个变量绑定都有一个生命周期。然而,似乎我想不出什么时候你真的需要使用它们,考虑到编译器在必要的时候能很好地推断它们 生锈的书,我读过了。我想要一个简单易懂的例子,即使是像我这样的人 当一个变量(有一些寿命)引用另一个具有不同寿命的变量时,我们在Rust中使用寿命参数 我们考虑这两个陈述: let i = 42; let ref_i = &i; 这里,i有一些生存期,ref\u i有一些其他生存期。然而,ref_i的类型编码了i的生存期(或者是声

我已经阅读了有关生命周期的内容,并了解到每个变量绑定都有一个生命周期。然而,似乎我想不出什么时候你真的需要使用它们,考虑到编译器在必要的时候能很好地推断它们

生锈的书,我读过了。我想要一个简单易懂的例子,即使是像我这样的人

当一个变量(有一些寿命)引用另一个具有不同寿命的变量时,我们在Rust中使用寿命参数

我们考虑这两个陈述:

let i = 42;
let ref_i = &i;
这里,
i
有一些生存期,
ref\u i
有一些其他生存期。然而,
ref_i
的类型编码了
i
的生存期(或者是声音的近似值);借用指针的类型是写入
&'a T
,而
'a
是指针引用对象的生存期

借用的指针只能引用比指针生命周期更长的值。如果情况并非如此,那么指针最终将悬空,即它将引用一个不再存在的值。编译器会自动为您验证这一点(只要您不编写
不安全的
代码);这是其他系统编程语言,如C++所不做的。但是为了验证这一点,编译器必须知道指针引用的值的生存期;这就是为什么我们在Rust中有寿命参数。幸运的是,编译器还可以在许多情况下推断生命周期,因此在这些情况下是透明的

根据设计,Rust只能进行局部类型推断。编译函数时,编译器不会检查其他函数体或其他类型以验证第一个函数是否正确;它只看他们的签名。对于函数,我们有省略规则,规定何时可以省略显式生存期参数以及编译器将推断它们是什么。对于结构,我们总是要明确地提到它们,因为我们几乎总是需要将结构上的生存期参数与其他项(例如,trait impl中trait的生存期参数,或方法上的返回类型)关联起来,并且由于编译器只做局部类型推断,我们需要在签名中明确地编码这种相关性

下面是一个包含借用的结构的简单示例:

struct Wrapper<'a>(&'a str);

impl<'a> Wrapper<'a> {
    fn extract(self) -> &'a str {
        self.0
    }
}
struct包装器{
fn摘录(自我)->&'a str{
self.0
}
}

首先,在结构定义上,我们需要为字符串片段引入一个生存期参数。然后,我们需要参数化
impl
,因为
Wrapper
需要一个生存期参数(在
中的
'a
是的可能重复,在后Ijedrz链接中有一个需要明确生命周期的代码示例尽管我完全同意你链接我的问题与我的问题类似,但@Francis Gagné给我的答案确实是一个很好的答案,在我看来,它比t的答案解释得更好。)o关于你把我联系在一起的问题。我非常感谢你的努力。