为什么这个 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
的引用。通常您可以省略生命周期,但是当引用存储在 struct
、enum
或类型别名中时,必须指定所有生命周期。所以别名的正确写法是:
type Name<'a> = &'a str;
生命周期声明在类型别名后,&str
的生命周期指定为'a
.
类型的生命周期有时可以在函数中省略,这就是为什么你可以写 &str
。这也适用于其他类型,包括类型别名。这意味着这是有效的:
fn foo(s: &String) -> Name { s.as_str() }
此处省略了 Name
上的生命周期参数。
我尝试了以下 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
的引用。通常您可以省略生命周期,但是当引用存储在 struct
、enum
或类型别名中时,必须指定所有生命周期。所以别名的正确写法是:
type Name<'a> = &'a str;
生命周期声明在类型别名后,&str
的生命周期指定为'a
.
类型的生命周期有时可以在函数中省略,这就是为什么你可以写 &str
。这也适用于其他类型,包括类型别名。这意味着这是有效的:
fn foo(s: &String) -> Name { s.as_str() }
此处省略了 Name
上的生命周期参数。