我想检查请求的结果是否有任何问题。我将其分为两类:i)服务器错误,ii)其他不成功的原因。第三类是,结果实际上是成功的。然而,在第三类中,我什么都不想做。
所以,我想要的代码是:
if res.status().is_server_error() {
panic!("server error!");
} else if !(res.status.is_success()){
panic!("Something else happened. Status: {:?}", res.status());
} else{
pass;
}
Run Code Online (Sandbox Code Playgroud)
我知道实现此结果的其他方法:使用match, ifs 而不是if else if. 但我想了解 对应的关键字是什么pass,就像我们在 Python 中一样。我的目标是:如果结果成功,就继续前进,如果不成功,有两种方法来处理这种恐慌。
nlt*_*lta 14
看哪!
\nif predicate {\n do_things();\n} else {\n // pass\n}\nRun Code Online (Sandbox Code Playgroud)\n或者甚至更好
\nif predicate {\n do_things();\n} // pass\nRun Code Online (Sandbox Code Playgroud)\n或者正如我\xe2\x80\x99最近将其称为隐式+传递系统
\nif predicate {\n do_things();\n}\nRun Code Online (Sandbox Code Playgroud)\n严肃地说,生锈没有通过也不需要通过。至于为什么它存在于python中,查看这个答案
\nuse*_*342 12
Python 需要pass,因为它使用基于缩进的块,所以它需要一些语法来“不执行任何操作”。例如,这将是 Python 程序中的语法错误:
# syntax error - function definition cannot be empty
def ignore(_doc):
# do nothing
count = process_docs(docs, ignore) # just count the docs
Run Code Online (Sandbox Code Playgroud)
该ignore函数必须包含一个块,而该块又必须包含至少一个语句。我们可以插入一个虚拟语句,例如None,但 Python 提供了pass它不会编译为任何内容并向人类读者发出信号(不执行任何操作)的意图。
这在 Rust 中是不需要的,因为 Rust 使用大括号来表示块,所以人们总是可以简单地使用以下命令创建一个空块{}:
// no error - empty blocks are fine
fn ignore(_doc: &Document) {
// do nothing
}
let count = process_docs(docs, ignore); // just count the docs
Run Code Online (Sandbox Code Playgroud)
当然,在惯用的 Python 和 Rust 中,人们会使用闭包来完成像上述ignore函数这样简单的事情,但仍然存在一些情况,其中pass和 空块确实有用。