结构与枚举生命周期的差异

Delta_Fore

为什么这项工作

#[derive(Debug)]
pub struct Foo<'a,'b> {
    s : &'a str,
    n : &'b i32
}
#[test]
fn test_struct() {
    let f = Foo { s : &"bar" , n : &17 };
    println!("{:?}",f);
}

但这不是

#[derive(Debug)]
pub enum Bar<'a,'b> {
    Baz ( &'a str),
    Fub ( &'b i32)
}
#[test]
fn test_struct() {
    let b = Bar::Baz(&"Foo");
    let c = Bar::Fub(&17);
    println!("{:?} {:?}",b,c);
}

错误是(属于较大文件的一部分,因此请忽略行号)

src\lib.rs:176:27: 176:29 error: borrowed value does not live long enough
src\lib.rs:176         let c = Bar::Fub(&17);
                       ^~~~~~~~~~~~~~~~~~~~~~

在我看来let c = Bar::Fub(&17),17的寿命"Foo"与在堆栈上创建的前一行的寿命相同如果我稍加修改并做

let h = &17;
let c = Bar::Fub(&h);

在这种情况下,完全清楚的是,h的持续时间比Bar :: Fub()更长。因此,我不确定如何才能使它正常工作。

这是结构中枚举的生命周期参数的后续操作

oli_obk

对我来说,似乎让c = Bar :: Fub(&17),它的寿命与在堆栈上创建“ Foo”的前一行的寿命相同

字符串文字始终具有'static生命周期,因此将始终存在足够长的时间。

我认为问题是您遇到的事实是枚举表达式实际上有点像函数调用。有点意思是在计算Enum的生存期时会忽略参数的生存期。枚举的生命周期显然要大一些,就像您写的那样:

let c: Bar;
let x = &17;
c = Bar::Fub(x);

地址范围已解决:寿命不足

在这种情况下,完全清楚的是,h的持续时间比Bar :: Fub()更长。

是的,这里的生命周期很清楚,并且可以在游戏围栏中使用

let x = &17;
let c = Bar::Fub(x);

所以我不确定你在问什么。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

结构中可变元素的生命周期

来自分类Dev

声明结构封闭的生命周期

来自分类Dev

在使用生命周期参数的函数调用中如何处理结构参数的生命周期?

来自分类Dev

将枚举的生命周期指定为返回类型

来自分类Dev

MarshalByRefObject生命周期

来自分类Dev

组件生命周期

来自分类Dev

ComponentDidMount()生命周期

来自分类Dev

RequestLocationUpdates生命周期

来自分类Dev

ViewPager的生命周期

来自分类Dev

对象的生命周期

来自分类Dev

订阅的生命周期

来自分类Dev

函数vs结构的类型参数(生命周期问题)

来自分类Dev

实现具有生命周期的结构

来自分类Dev

跟踪项目生命周期事件的数据库结构

来自分类Dev

没有数组的结构的生命周期

来自分类Dev

跟踪商品生命周期事件的数据库结构

来自分类Dev

从具有生命周期的结构转换为特征

来自分类Dev

结构中 FnMut 字段的参数的生命周期是什么?

来自分类Dev

构建具有相同生命周期的多个引用的结构时,无法推断适当的生命周期

来自分类Dev

活动生命周期图中的矛盾与生命周期的描述

来自分类Dev

Imgur图像的生命周期

来自分类Dev

Chrome应用生命周期

来自分类Dev

嵌套片段生命周期

来自分类Dev

片段的Robospice生命周期

来自分类Dev

ContentProvider销毁/生命周期

来自分类Dev

ContentProvider销毁/生命周期

来自分类Dev

Django流程生命周期

来自分类Dev

Android片段生命周期

来自分类Dev

活动生命周期Android