如何将返回值的生存期设置为要移入的变量的生存期?

sgldiv

我正在尝试教自己一些生锈的知识,并写了一些类似的内容:

let args:Vec<String> = env::args().collect();
let parsed = parser::sys(args.as_slice());

...

pub fn sys<'a>(args:&'a [String]) -> Parsed<'a> {
  parsed(args)
}

其中parsed是一个解析和加载配置的函数。

这很好。现在,我试图抽象化显式调用env::args()并将其隐藏在对的调用中sys,因此我编写了新版本的sys

pub fn sys<'a>() -> Parsed<'a> {
  let args:Vec<String> = env::args().collect();
  parsed(args.as_slice())
}

而这失败了:

error: `args` does not live long enough
src/test.rs:66      parsed(args.as_slice())

我认为该错误是因为编译器无法推断出我希望此新创建的结构的生存期是要移入其中的变量的生存期。这样对吗?如何在此返回值上标注生命周期/解决此问题?

马修M.

我认为该错误是因为编译器无法推断出我希望此新创建的结构的生存期是要移入其中的变量的生存期。

其实没有

错误的原因是您尝试在变量中创建引用argssys因为args变量返回引用后将不再有效,因为引用是局部变量,因此在的末尾删除sys

如果你想使用的参考,你可以提供sys一个&'a mut Vec<String>(空),填写好sys,并回归到它的引用:

pub fn sys<'a>(args: &'a mut Vec<String>) -> Parsed<'a> {
    *args = env::args().collect();
    parsed(args.as_slice())
}

这样可以确保通话不会args中断sys这将args在结果的整个生命周期内借用

另一种解决方案是取消'a并仅拥有Parsed其自身的元素,而不是对其进行引用。但是,如果没有定义,Parsed我无法建议如何做到最好。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何将结构的生存期限制为“父”结构的生存期?

来自分类Dev

如何指示异步函数的返回值的生存期与参数相同?

来自分类Dev

如何使用结构和impl的生存期为实现推断合适的生存期?

来自分类Dev

使用createUserSession()设置会话生存期

来自分类Dev

循环变量生存期的C ++很奇怪

来自分类Dev

std :: stirng的对象生存期返回const char *作为返回值

来自分类Dev

将变量传递给函数和生存期

来自分类Dev

您如何通过Java设置Kerberos票证生存期?

来自分类Dev

Symfony 2:如何设置登录时的会话生存期?

来自分类Dev

Symfony 2:如何设置登录时的会话生存期?

来自分类Dev

函数内部局部变量的生存期如何延长?

来自分类Dev

如何指定Option <closure>的生存期?

来自分类Dev

存储闭包以获取返回值时的生存期要求冲突

来自分类Dev

Cassandra会话生存期

来自分类Dev

ReactiveUI ObservableForProperty生存期

来自分类Dev

StructureMap生存期范围

来自分类Dev

StructureMap生存期范围

来自分类Dev

ARC中奇怪的对象生存期:如何强制精确的对象生存期?

来自分类Dev

如何指定方法参数的生存期必须比self的生存期长?

来自分类Dev

如何指定该方法参数的生存期必须比self的生存期长?

来自分类Dev

如何将生存期应用于VecDeque <Box <dyn Trait >>?

来自分类Dev

如何延长从访问器返回的右值引用的生存期?

来自分类Dev

从函数返回的迭代器的生存期要求冲突

来自分类Dev

返回带有自我生存期的参考

来自分类Dev

C中局部变量的范围和生存期

来自分类Dev

最后尝试变量的C#生存期

来自分类Dev

类与结构中的实例变量生存期

来自分类Dev

Rust指定局部变量的生存期

来自分类Dev

类与结构中的实例变量生存期

Related 相关文章

  1. 1

    如何将结构的生存期限制为“父”结构的生存期?

  2. 2

    如何指示异步函数的返回值的生存期与参数相同?

  3. 3

    如何使用结构和impl的生存期为实现推断合适的生存期?

  4. 4

    使用createUserSession()设置会话生存期

  5. 5

    循环变量生存期的C ++很奇怪

  6. 6

    std :: stirng的对象生存期返回const char *作为返回值

  7. 7

    将变量传递给函数和生存期

  8. 8

    您如何通过Java设置Kerberos票证生存期?

  9. 9

    Symfony 2:如何设置登录时的会话生存期?

  10. 10

    Symfony 2:如何设置登录时的会话生存期?

  11. 11

    函数内部局部变量的生存期如何延长?

  12. 12

    如何指定Option <closure>的生存期?

  13. 13

    存储闭包以获取返回值时的生存期要求冲突

  14. 14

    Cassandra会话生存期

  15. 15

    ReactiveUI ObservableForProperty生存期

  16. 16

    StructureMap生存期范围

  17. 17

    StructureMap生存期范围

  18. 18

    ARC中奇怪的对象生存期:如何强制精确的对象生存期?

  19. 19

    如何指定方法参数的生存期必须比self的生存期长?

  20. 20

    如何指定该方法参数的生存期必须比self的生存期长?

  21. 21

    如何将生存期应用于VecDeque <Box <dyn Trait >>?

  22. 22

    如何延长从访问器返回的右值引用的生存期?

  23. 23

    从函数返回的迭代器的生存期要求冲突

  24. 24

    返回带有自我生存期的参考

  25. 25

    C中局部变量的范围和生存期

  26. 26

    最后尝试变量的C#生存期

  27. 27

    类与结构中的实例变量生存期

  28. 28

    Rust指定局部变量的生存期

  29. 29

    类与结构中的实例变量生存期

热门标签

归档