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

Why does this Rust type alias need a lifetime parameter?

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

type Name = String;

它工作正常。所以我尝试了一个变体:

type Name = &str;

这失败了:

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

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

问题是 String 拥有它的内存,而 &str 是对 str 的引用。通常您可以省略生命周期,但是当引用存储在 structenum 或类型别名中时,必须指定所有生命周期。所以别名的正确写法是:

type Name<'a> = &'a str;

生命周期声明在类型别名后,&str的生命周期指定为'a.

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

fn foo(s: &String) -> Name { s.as_str() }

此处省略了 Name 上的生命周期参数。