对于以下代码:

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是生命周期的批注,但不知道为什么将它放在implConfig之后。第一个'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/

10-12 21:39