为什么在生命周期参数中使用'generic'这个词?
Why use the word 'generic' in lifetime parameters?
当我们写:
fn foo<'a, 'b>(x: &'a u32, y: &'b u32) -> &'a u32 {
x
}
为什么我们不直接将 'a
和 'b
称为 生命周期参数 而不是 通用参数生命周期参数?它只是一种语法方式,可以根据参数的生命周期向编译器传达对返回引用生命周期的约束。我正在努力寻找包含“通用”一词的理由 here。
我们在“生命周期参数”前面使用“通用”一词,因为它们是通用生命周期参数。
明显的反例是 '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
}
两个调用中的输入参数和输出return类型之间的生命周期约束关系相同,但生命周期不同。
"Generic" makes me think of generic types, but as far as I can tell it has no relevance here.
您可以将“通用类型”视为“具有通用参数的类型”的 shorthand,但这些通用参数可以是以下任何一个或全部:
通用类型参数(如 Vec<T>
);
通用生命周期参数(如 type Ref<'a> = &'a i32
);
泛型常量参数 (real soon now)。
“通用函数”=“具有通用参数的函数”。
您可以将其缩短为“生命周期参数”,因为所有生命周期 参数(并非所有生命周期!)都是通用的。这同样适用于类型参数。
but I still don't see how that makes 'a generic as opposed to simply a parameter which takes various values
生命周期参数和类型参数有一些共同点没有,但在 Rust 中有:
最明显的:它们写在<
>
之间而不是(
)
;
可以推断;
代码不能根据它们的值进行分支。
所以它们被组合在一起作为“通用参数”而不是“值参数”。
当我们写:
fn foo<'a, 'b>(x: &'a u32, y: &'b u32) -> &'a u32 {
x
}
为什么我们不直接将 'a
和 'b
称为 生命周期参数 而不是 通用参数生命周期参数?它只是一种语法方式,可以根据参数的生命周期向编译器传达对返回引用生命周期的约束。我正在努力寻找包含“通用”一词的理由 here。
我们在“生命周期参数”前面使用“通用”一词,因为它们是通用生命周期参数。
明显的反例是 '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
}
两个调用中的输入参数和输出return类型之间的生命周期约束关系相同,但生命周期不同。
"Generic" makes me think of generic types, but as far as I can tell it has no relevance here.
您可以将“通用类型”视为“具有通用参数的类型”的 shorthand,但这些通用参数可以是以下任何一个或全部:
通用类型参数(如
Vec<T>
);通用生命周期参数(如
type Ref<'a> = &'a i32
);泛型常量参数 (real soon now)。
“通用函数”=“具有通用参数的函数”。
您可以将其缩短为“生命周期参数”,因为所有生命周期 参数(并非所有生命周期!)都是通用的。这同样适用于类型参数。
but I still don't see how that makes 'a generic as opposed to simply a parameter which takes various values
生命周期参数和类型参数有一些共同点没有,但在 Rust 中有:
最明显的:它们写在
<
>
之间而不是(
)
;可以推断;
代码不能根据它们的值进行分支。
所以它们被组合在一起作为“通用参数”而不是“值参数”。