Enums 返回带有';静态告诉编译器此值不为';没有关联的生存期,或者它使该值为静态值?

Enums 返回带有';静态告诉编译器此值不为';没有关联的生存期,或者它使该值为静态值?,enums,rust,lifetime,Enums,Rust,Lifetime,我有一个具有“部分”生存期的枚举:它的一个变体包含借用值,另一个包含拥有值。我有一个函数,它总是返回一个带有所属变量的枚举。为了使编译器满意,我必须声明返回的枚举的生存期是静态的 我的问题是关于返回的枚举的实际生存期: 通过声明生存期是静态的,我只是在指导编译器,这个枚举没有关联的生存期,还是我真的将那个实例变成了静态的 pub enum有时{ pub fn from_u16(data:u16)->有时它看起来就是这样的:您告诉编译器,from_u16返回的类型将有一个与之相关联的'static

我有一个具有“部分”生存期的枚举:它的一个变体包含借用值,另一个包含拥有值。我有一个函数,它总是返回一个带有所属变量的枚举。为了使编译器满意,我必须声明返回的枚举的生存期是静态的

我的问题是关于返回的枚举的实际生存期:

通过声明生存期是静态的,我只是在指导编译器,这个枚举没有关联的生存期,还是我真的将那个实例变成了静态的

pub enum有时{

pub fn from_u16(data:u16)->有时它看起来就是这样的:您告诉编译器,
from_u16
返回的类型将有一个与之相关联的
'static
生存期。这个生存期与枚举类型本身一起进行,而不是特定的变体

类型
有时
除非
'a
'static
。例如,如果
'a
可以被设置为
'static
的话,您可能无法从函数
fn foobar)->…
调用/返回值,这些值是从\u u16
返回的(编译器会对您大喊大叫,因为您承诺使用通用生存期
'a
,但使用特定生存期
'static
,并且无法证明
'a
实际上是
'static

另一个结果是,您无法将
返回的对象的值从\u u16
更改为
有时::借用(&mut u16)
,除非该引用是
“静态的”
(这可能是您想要的)考虑上面的函数<代码> FoBar < /C> >,编译器认为<<代码> A/<代码>是代码>静态> <代码>,它是从<代码>中返回的,从u16u返回。现在某个代码在某些地方将值变为“代码”。有时::借用。只有在与<代码>相关联的生命周期内才是安全的:有时::借用< /代码>>一直以来都是静态的,否则,foobar现在可以处理它认为是静态的生命周期,但事实上,它是一个悬空的引用。这就是划水

因此,不可以,您不能指导编译器存在生命周期无关紧要的枚举变量。返回的实例本身不是
'static
,它只是在任何地方都带有一个关联的生命周期
'static
,如果您试图返回一些泛型生命周期,但实际返回
,编译器会抱怨静态