有没有办法选择两个生命中的较小者?

时间:2019-02-28 12:41:36

标签: rust lifetime

我的意思是:

fn minimum<'a, 'b>(x: &'a mut i32, y: &'b mut i32) -> &'min(a, b) mut i32 {
    (x < y) ? x : y
}

我们不知道将在生命周期中选择哪个引用,但是编译器知道两个引用在哪个范围内仍然有效,并且返回的引用可以安全地使用。

一种可以提及的解决方法:

fn minimum<'a, 'b> where 'b: 'a (x: &'a i32, y: 'b i32) -> &'a i32 {
    (x < y) ? x : y
}

并不是真正的解决方案,因为在调用函数时,我们必须同时处理两种情况:'a: 'b'b: 'a

1 个答案:

答案 0 :(得分:9)

这是当您只有一个统一生存期时,编译器会自动自动执行的操作:

fn minimum<'a>(x: &'a mut i32, y: &'a mut i32) -> &'a mut i32 {
    if x < y { x } else { y }
}

这是唯一的内存安全选项,因为该函数的实现可能选择任何一个引用。

没有“最大”等效项,因为使用它不能保证内存安全。

另请参阅: