rust - 有没有办法选择两个生命周期中较小的一个?

标签 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

最佳答案

当你有一个统一的生命周期时,这是编译器自动做的事情:

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

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

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

另见:

关于rust - 有没有办法选择两个生命周期中较小的一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54926005/

相关文章:

rust - 使用Box分配大数组时,线程 '<main>'溢出了其堆栈

enums - 有没有办法在没有模式匹配的情况下直接访问枚举结构中的字段值?

enums - "cannot infer an appropriate lifetime"当使用闭包返回对枚举变体内容的引用时

rust - 如何使用 Rust 中的 StreamExt::scan 方法改变异步 block 内的状态?

rust - 变量在嵌套 lambda 中存活时间不够长的借用检查错误

rust - 遍历 u8 的所有值时出现文字超出范围警告

rust - 在 Rust 中为 Option<number> 做 max 的惯用方法

rust - 借用的值(value)活得不够长,需要静态生命周期

rust - 如何传递包含作为引用的参数的异步回调?

rust - Rust "toolchain"究竟是什么?