如何使用带条件的 if let 语句?

How to use if let statement with conditions?

我知道可以在 if let 语句和这样的条件之间表达 AND 逻辑

if let (Some(a), true) = (b, c == d) {
    // do something
}

但是如果我需要 OR 逻辑怎么办?

if let (Some(a)) = b /* || c == d */ {
    // do something
} else {
    // do something else
}

我唯一想出来的方法如下,但我觉得有点难看,因为我必须写两次代码

if let (Some(a)) = b {
    // do something
} else if c == d {
    // do something
} else {
    // do something else
}

如果您在两种情况下都有相同的“做某事”代码,则不得使用 a。在这种情况下,您可以使用 is_some:

if b.is_some() || c == d {
    // do something
} else {
    // do something else
}

在更一般的情况下,您可以使用 matches! 检查 b 是否匹配模式而不创建任何绑定:

if matches!(b, Some(_)) || c == d {
    // do something
} else {
    // do something else
}