为什么这个Rust类型别名需要一个生命周期参数?

3
我尝试了以下 Rust 类型别名:

type Name = String;

它运行得很好。所以我尝试了一个变体:

type Name = &str;

这个失败了:

error[E0106]: missing lifetime specifier
 --> src/main.rs:1:17
  |
1 |     type Name = &str;
  |                 ^ expected lifetime parameter

为什么类型别名需要生命周期参数?我该如何添加它?

1个回答

2
问题在于String拥有它的内存,而&str是对str的引用。通常情况下,您可以省略生命周期,但当引用存储在structenum或类型别名中时,必须指定所有生命周期。因此,编写别名的正确方法是:
type Name<'a> = &'a str;

类型别名的名称后声明了生命周期,&str 的生命周期被指定为 'a。

有时在函数中可以省略类型上的生命周期,这就是为什么可以写成 &str。这也适用于其他类型,包括类型别名。这意味着以下内容是有效的:

fn foo(s: &String) -> Name { s.as_str() }
< p > 这里省略了 Name 上的生命周期参数。 < /p >

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接