是 if-let 还是正常的 if 条件更好?

Kua*_*Chu 6 rust

例如:

fn foo() -> Option<()> {
     // ...
}

fn bar() -> Option<()> {
    if let None = foo() { // <---- here
        return None;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我将 if 语句更改为:

if None == foo()
Run Code Online (Sandbox Code Playgroud)

它也有效。

可以使用a == b代替if let a = b吗?

She*_*ter 7

回应和扩展Magnus Hoff 的观点,我只if let在我关心与之匹配的值时使用。在这个例子中,我会使用类似的东西Option::is_none来进一步强调我不在乎:

if foo().is_none() { 
Run Code Online (Sandbox Code Playgroud)

正如fjh 指出的那样,这具有回避包装T实现要求的微小好处。PartialEq

然而,根据我的经验,这种特殊的结构很少见,因为通常你想在这种Some情况下做一些事情。一旦你有多个分支,我升级到一个match语句。