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

时间:2016-05-05 10:50:03

标签: rust

例如:

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

fn bar() -> Option<()> {
    if let None = foo() { // <---- here
        return None;
    }
}

然后我将if语句改为:

if None == foo()

它也有效。

是否可以使用a == b代替if let a = b

2 个答案:

答案 0 :(得分:4)

Magnus Hoff's point上回应和扩展,当我关心匹配的值时,我只使用if let。在这个例子中,我使用类似Option::is_none的内容来进一步强调我不在乎:

if foo().is_none() { 

这样做的好处是可以避免包裹T实施PartialEq的要求,因为fjh points out

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

答案 1 :(得分:2)

  

所以我的问题是:是否可以使用== b代替如果让a = b?

是的,这绝对没问题。

有一点需要注意的是,如果你正在处理Option<T> T实现PartialEq的某种类型,前者只会编译,而后者无论如何都会有效。这是因为如果Option<T>实现PartialEqT仅实现PartialEq