这闻起来很难闻:

let millis = time % 1000;
match millis {
    0..=199 => do_something(),
    200..=599 => do_something_else(),
    600..=999 => do_something_altogether_different(),
    _ => panic!("There are only 1,000 ms in a second."),
}

永远不会调用"u" case ,因为millis代表time % 1000.

我如何重写它,使我只有三个分支?

理想情况下,我还希望删除199/200、599/600和999/1000/0的副本.

如果最好的解决方案不是match,我很乐意使用其他控制 struct .

推荐答案

这只是对Kevin Reid答案的改进,该答案通过颠倒顺序消除了重复:

let millis: u64 = time % 1000;
match millis {
    600.. => todo!(),
    200.. => todo!(),
    0.. => todo!(),
}

我们还可以再省略一个数字,但我还不确定这是否是一个进步.

let millis: u64 = time % 1000;
match millis {
    600.. => todo!(),
    200.. => todo!(),
    _ => todo!(),
}

Rust相关问答推荐

如何在Rust中获得高效的浮点最大值

为什么函数不接受选项T参数的所有权?

避免在Collect()上进行涡鱼类型的涂抹,以产生<;Vec<;_>;,_>;

如何将映射反序列化为具有与键匹配的字段的定制 struct 的向量?

Trait bound i8:来自u8的不满意

使用关联类型重写时特征的实现冲突

关于使用平面图功能的borrow 判断器的问题

为什么BufReader实际上没有缓冲短寻道?

更新 rust ndarray 中矩阵的一行

Rust 为什么被视为borrow ?

我如何取消转义,在 Rust 中多次转义的字符串?

在运行时在 Rust 中加载字体

切片不能被 `usize` 索引?

如何将切片推入数组?

当 `T` 没有实现 `Debug` 时替代 `unwrap()`

有没有更好的方法来为拥有 DIsplay 事物集合的 struct 实现 Display?

有没有办法隐藏类型定义?

如何创建动态创建值并向它们返回borrow 的工厂?

Rust 为什么 (u32, u32) 的枚举变体的大小小于 (u64)?

A 有一个函数,它在 Option<> 类型中时无法编译,但在 Option<> 类型之外会自行编译.为什么?