fn foo<'a>(x: &'a i32, y: &'a i32) {}
fn main() {
let a = 123;
{
let b = 234;
foo(&a, &b);
}
}
在上面的代码中,
&a
和 &b
应该有不同的生命周期引用。编译器是如何推断出foo
的生命周期变量 'a
呢?据我所知,它并没有使用标准的 Hindley-Milner 统一算法。生命周期必须是内部范围或两个生命周期的某个交集。寿命推断是否完全独立于标准类型推断过程?编译器是否使用交叉类型或在生命周期之间使用某些子类型关系来选择最受限制的生命周期?