例如:
fn foo() -> Option<()> {
// ...
}
fn bar() -> Option<()> {
if let None = foo() { // <---- here
return None;
}
}
然后我将if语句改为:
if None == foo()
它也有效。
是否可以使用a == b
代替if let a = b
?
答案 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>
实现PartialEq
,T
仅实现PartialEq
。