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

时间:2017-07-27 00:55:16

标签: types rust type-alias

我尝试了以下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 个答案:

答案 0 :(得分:2)

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

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

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

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

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

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

相关问题