2017-07-27 131 views
1

我尝试以下防锈类型别名:为什么这个Rust类型别名需要一个生命周期参数?

type Name = String; 

它工作正常。所以,我想变体:

type Name = &str; 

这种失败:

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

为什么一个类型别名需要一辈子的参数,我会怎么加呢?

回答

2

问题是String拥有它的内存,而&str是对str的引用。通常您可以延长生命期,但是当参考文件存储在struct,enum或类型别名中时,必须指定所有生存期。所以写别名正确的方法是:

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

寿命类型别名的名称后声明,以及&str寿命被指定为'a

有时类型上的生存时间有时可能会被忽略,这就是为什么你可以写&str。这也适用于其他类型,包括类型别名。这意味着,这是有效的:

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

Name寿命参数此处省略。

相关问题