对于以下代码:
struct Config<'a> {
query: &'a str,
filename: &'a str,
case_sensitive: bool,
}
impl<'a> Config<'a> {
pub fn new(args: &'a [String]) -> Result<Config, &'static str> {
if args.len() < 3 {
return Err("not enough arguments");
}
let query = &args[1];
let filename = &args[2];
let case_sensitive = env::var("CASE_INSENSITIVE").is_err();
Ok(Config {
query,
filename,
case_sensitive,
})
}
}
为什么需要
impl<'a> Config<'a> {
而不是impl Config<'a> {
?第一和第二个
'a
的语法含义是什么?我知道'a
是生命周期的批注,但不知道为什么将它放在impl
和Config
之后。第一个'a
会做什么,第二个'a
会做什么? 最佳答案
第一个<'a>
声明一个上下文,该上下文引入了通用量化的变量。换句话说,impl<'a> ...
的意思是“实现任何可能的生命周期'a
...”。
引入变量后,第二个'a
是将变量应用于类型。
您可以将语法impl<'a> Config<'a>
读为:“对于任何可能的生命周期'a
,这些方法都是为Config<'a>
定义的”。
在更复杂的情况下,可以在上下文中对参数施加约束。对于生命周期,这始终是“生命周期”关系,例如<'a, 'b: 'a
>(“对于所有生命周期'a
和'b
,其中'b
生命周期超过'a
”)。对于类型,这可能包括特征或生存期限制,例如<'a, T: + Debug + 'a>
(“对于所有生命周期,'a
和所有类型T
,其中T
实现Debug
,并且不超过'a
”)。
关于rust - `impl<'的语法含义a>配置<'a> {`,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56411142/