Python中的'pass'语句在其他语言中有什么等价语句?

3
我想检查请求结果是否有问题。我将它分为两类: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;
    }

我知道有其他方法可以实现这个结果:使用match,使用if而不是if else if。但是我想知道与Python中的pass相对应的关键字是什么。我的目标是:如果结果成功,就继续前进,如果不成功,有两种处理恐慌的方式。


4
要不完全省略else分支? - Péter Leéh
这是一种方式,也就是我在问题中所说的“if”的意思。但我想知道 Rust 中类似于 pass 的 no-op,如果 if 条件为真,则什么也不做。 - Aviral Srivastava
7
你可以留下一个空块,程序也能编译通过。在Python中,由于它是一种缩进敏感的语言,所以需要使用pass占位符。但Rust不需要。 - geobreze
2个回答

13

看啊!

if predicate {
    do_things();
} else {
    // pass
}

甚至更好

if predicate {
    do_things();
} // pass

或者,正如我最近称之为的那样,隐式+传递系统

if predicate {
    do_things();
}

严肃地说,在Rust语言中没有pass关键字,也不需要使用它。至于为什么Python中存在这个关键字,请查看这个答案


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
< p > ignore函数必须包含一个块(block),而该块必须包含至少一条语句。我们可以插入一个虚拟语句,例如None,但Python提供了pass,它编译为空白并向人类读者传达不采取任何行动的意图。< /p >< p >在Rust中不需要这样做,因为Rust使用大括号表示块,所以可以始终使用{}创建空块:< /p >
// no error - empty blocks are fine
fn ignore(_doc: &Document) {
    // do nothing
}

let count = process_docs(docs, ignore);  // just count the docs

当然,在习惯用语的Python和Rust中,像上面这个简单的ignore函数一样的东西,人们都会使用闭包,但仍有一些情况下,pass和空块确实很有用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接