当struct和它的成员具有不同的生命周期时,理解锈中的引用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当struct和它的成员具有不同的生命周期时,理解锈中的引用相关的知识,希望对你有一定的参考价值。
我正在玩lifetime
生锈的复杂性,我最后编写了以下代码:
trait Boss<'a, 'c> {
fn work(&self, &'a i32) -> &'c i32;
}
struct Human<'c> {
i:&'c i32
}
impl<'a, 'b, 'c> Boss<'a, 'c> for &'b Human <'c> {
fn work(&self, v:&'a i32) -> &'c i32 {
&self.i
}
}
fn main () {
let h = Human {i:&1};
}
这段代码编译,但我不确定为什么。据我了解,&Human
有'b
的寿命,而i
的参考成员struct Human
有'c
。为什么编译器不抱怨'b
可以比'c
更活跃?
答案
h : Human<'static>
和'static
参考符合任何输出寿命要求。
尝试编写一些代码,其中h.i
引用一个寿命比h短的变量。
fn main () {
let mut h = Human {i:&1};
{
let x : i32 = 3;
h.i = &x;
}
let r = (&h).work(&3);
}
error[E0597]: `x` does not live long enough
--> a.rs:21:5
|
20 | h.i = &x;
| - borrow occurs here
21 | }
| ^ `x` dropped here while still borrowed
22 | let r = (&h).work(&3);
23 | }
| - borrowed value needs to live until here
以上是关于当struct和它的成员具有不同的生命周期时,理解锈中的引用的主要内容,如果未能解决你的问题,请参考以下文章