gpt4 book ai didi

rust - 非详尽模式 - Rust 匹配表达式

转载 作者:行者123 更新时间:2023-11-29 07:54:04 25 4
gpt4 key购买 nike

我对以下 Rust 代码有疑问:

pub fn median(v: &Vec<i32>) -> f32 {
let len = v.len();
match len % 2 {
0 => (v[len / 2 - 1] + v[len / 2]) as f32 / 2 as f32,
1 => v[(len - 1) / 2] as f32,
}
}

由于“非详尽模式”错误,此代码无法编译。这是为什么? % 运算符返回什么?

最佳答案

编译器不够聪明,无法确定 len % 2 的结果只能是 01。对于结果为其他值的情况,它需要匹配臂。您可以通过明确说明这些情况是不可能的来解决此问题:

match len % 2 {
0 => (v[len / 2 - 1] + v[len / 2]) as f32 / 2 as f32,
1 => v[(len - 1) / 2] as f32,
_ => unreachable!()
}

_ 将匹配之前未提及的任何其他值。 unreachable!()告诉编译器“此代码将永远不会执行”,但会导致 panic!() 以防万一它确实执行了。这样一来,该程序将始终正确,而且几乎没有任何成本。

编译器的 future 版本可能会发现值 2.. 或不可能。

%remainder operator (不要与 mod 运算符混淆)。

关于rust - 非详尽模式 - Rust 匹配表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57962167/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com