在大多时候,Rust 的生命周期你只要标识了,即可以通过编译,但是总是存在一些情况,会导致编译无法通过,本文就讲述这样一种情况:因为生命周期声明的范围过大,导致了编译无法通过,希望大家喜欢

这段代码看上去并不复杂,实际上难度挺高的,首先在直觉上,list.get_interface()借用的可变引用,按理来说应该在这行代码结束后,就归还了,为何能持续到use_list(&list)后面呢?

这是因为我们在get_interface方法中声明的lifetime有问题,该方法的参数的生明周期是'a,而List的生命周期也是'a,说明该方法至少活得跟List一样久,再回到main函数中,list可以活到main函数的结束,因此list.get_interface()借用的可变引用也会活到main函数的结束,在此期间,自然无法再进行借用了。

要解决这个问题,我们需要为get_interface方法的参数给予一个不同于List<'a>的生命周期'b,最终代码如下:

当然,咱还可以给生命周期给予更有意义的名称: