【问题标题】:Is there a way to choose the lesser of two lifetimes?有没有办法选择两个生命中较小的一个?
【发布时间】:2019-07-22 09:17:13
【问题描述】:

我的意思是这样的:

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

【问题讨论】:

  • 我喜欢这个问题;这意味着你对生命有完全正确的心态:)

标签: rust lifetime


【解决方案1】:

当您有一个统一的生命周期时,编译器会自动执行以下操作:

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

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

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

另见:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-18
    • 2018-10-08
    • 2018-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-13
    相关资源
    最近更新 更多