Как использовать оператор if let с условиями?

Я знаю, что можно выразить логику AND между оператором if let и таким условием

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

Но что, если мне нужна логика ИЛИ?

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?

John Kugelman 07.05.2022 06:31

Если a не используется в организме, вы можете просто использовать if b.is_some() || c == d { ... }. Если в теле используется aявляется, то каким должно быть a, когда b есть None, но c == d?

cdhowie 07.05.2022 06:32
Почему Python в конце концов умрет
Почему Python в конце концов умрет
Последние 20 лет были действительно хорошими для Python. Он прошел путь от "просто языка сценариев" до основного языка, используемого для написания...
1
3
46
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если у вас один и тот же код «сделать что-нибудь» в обоих случаях, он не должен использовать 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
}

Другие вопросы по теме