作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对以下 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
的结果只能是 0
或 1
。对于结果为其他值的情况,它需要匹配臂。您可以通过明确说明这些情况是不可能的来解决此问题:
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/
我有一个实用函数来在引用中存储不断变化的值: export function useRefOf(value: T) { const ref = useRef(value); useEffect
我是一名优秀的程序员,十分优秀!