这闻起来很难闻:
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”大小写,因为millis
是time%1000
。
我如何重写它,使我只有三个分支?
理想情况下,我还想删除199/200, 599/600和999/1000/0的重复。
如果最好的解决方案不是匹配
,我很乐意使用其他一些控制结构。
您可以修改其中一个ARM,使编译器理解它包含不可能发生的情况,方法是将其中一个范围设为无界。这可以被视为匹配
版本的
if
链选项:
fn foo(time: u32) {
let millis = time % 1000;
match millis {
0..=199 => todo!(),
200..=599 => todo!(),
600.. => todo!(),
}
}
然而,我只会在代码中选择这个选项,这个代码显然和这个例子一样正确;在更复杂的情况下,我更喜欢带有
\u的版本=
如果,我会使用一个简单的,因为每个案例只有一个条件,只有少量案例:
if millis < 200 {
do_something()
} else if millis < 600 {
do_something_else()
} else {
do_something_altogether_different()
}
如果要使用
match
,也可以在其中使用If
-guard:
match millis {
x if x < 200 => do_something(),
x if x < 600 => do_something_else(),
_ => do_something_altogether_different(),
}
两者都删除了
199
/200
。。。
Rust使用类型进行匹配,因此它不知道根据您的逻辑的边界。但你知道。
为了明确起见,您可以使用unreachable
:
表示无法访问的代码。
这在编译器无法确定某些代码不可访问时非常有用。例如:
匹配武器与保护条件。动态终止的循环。动态终止的迭代器。如果代码不可达的判断证明是不正确的,程序立即以恐慌终止!。
let millis = time % 1000;
match millis {
0..=199 => do_something(),
200..=599 => do_something_else(),
600..=999 => do_something_altogether_different(),
_ => unreachable!("There are only 1,000 ms in a second."),
}
否则,您可以认为最后一个分支是默认的:
let millis = time % 1000;
match millis {
0..=199 => do_something(),
200..=599 => do_something_else(),
_ => do_something_altogether_different(),
}
问题内容: 在确定文件是否存在时,使用try语句如何避免“竞争条件”? 我之所以这样问是因为高度支持的答案0)(更新:已删除)似乎暗示使用会创造机会,否则这种机会就不会存在。 给出的示例是: 但与以下内容相比,我不了解如何避免出现竞争状况: 调用如何使攻击者能够处理他们无法完成的文件? 问题答案: 比赛条件,当然,你的程序和文件上运行一些其他的代码之间(竞争状态总是需要至少两个平行的进程或线程,看
问题内容: 我已经阅读了很多有关代码重构和避免if else语句的主题。实际上,我有一堂课,我在使用很多if-else条件。 更多详细信息:我正在使用拉式解析器,并且在我的肥皂响应的每一行上,我都会检查是否有我感兴趣的标签,如果没有,请检查其他标签,等等: 现在,我想使用somethimg,而不是其他条件,但是我不知道是什么。 您能给我一个例子还是一个很好的教程页面? 谢谢。 问题答案: 在这种特
在使用模式匹配时,此示例可能会被讨论为“gotcha”: 这是一个使用结构模式匹配进行意外捕获的示例。它提供了以下意外输出: 同样的问题也以其他形式出现: 在此示例中,需要有括号,。没有它们,它“捕获”并将str内置类型替换为x的值。 是否有防御性编程实践可以帮助避免这些问题并提供早期检测?
在上述情况下,如果用户为空,则给出NPE。如何避免NPE?
问题内容: 我设计了一个简单的函数来返回数学函数,该函数可用于拟合实验数据。这些功能看起来很像以下内容: 不幸的是,我在RunTimeWarnings中遇到了麻烦: 由于值太大或太小。但我无法自行解决此问题。有什么办法可以重新定义我的功能,使其在没有警告的情况下通过? 问题答案: 使用以控制在这种情况下做什么numpy的:http://docs.scipy.org/doc/numpy/refere
Lodash castArray函数没有任何特殊之处。有没有什么方法可以在没有任何外部库的情况下,利用最新的语言功能解决这个问题,但时间很短? 如果您不熟悉该任务: 有没有办法在没有类型检查的情况下做到这一点?请注意,我寻找最短的等效物ES6。