为什么在生命周期参数中使用“通用”一词?

当我们写:

fn foo<'a, 'b>(x: &'a u32, y: &'b u32) -> &'a u32 {
    x
}

为什么我们不将'as 和'bs 称为生命周期参数而不是通用生命周期参数?这只是一种语法方式,可以根据参数的生命周期向编译器传达对返回引用生命周期的约束。我正在努力了解在此处包含“通用”一词的理由。

回答

我们在“生命周期参数”之前使用“通用”一词,因为它们是通用生命周期参数。

明显的反例是'static这是唯一的非匿名生命周期,因此我们可以在通用上下文之外引用它。另一方面,由于所有其他可能的生命周期都是匿名的,我们可以引用它们的唯一方法是通过通用生命周期参数。

foo下面的函数理论上可以在无限多个不同的可能生命周期内调用,并且它可以在所有这些情况下工作,因为它在生命周期内是通用的。这是一个使用 2 个不同生命周期调用它的示例:

fn foo<'a>(x: &'a i32) -> &'a i32 { x }

fn main() {
    foo(&1); // called with 'static lifetime
    let x = 1;
    foo(&x); // called with x's anonymous lifetime
    // and so on
}

两次调用中输入参数和输出返回类型之间的生命周期约束关系相同,但生命周期不同。


以上是为什么在生命周期参数中使用“通用”一词?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>