Использование while let с двумя переменными одновременно

Я изучаю Rust и сталкиваюсь с проблемами leetcode. Один из них включает в себя объединение двух связанных списков, узлы которых являются необязательными. Я хочу написать цикл while, который будет продолжаться до тех пор, пока хотя бы 1 узел не станет None, и я пытался использовать для этого цикл while let.

Однако похоже, что синтаксис while let поддерживает только один необязательный параметр, например:

while let Some(n) = node {
   // do stuff
}

но я не могу писать

while let Some(n1) = node1 && Some(n2) = node2 {
}

Я неправильно понимаю синтаксис? Я знаю, что могу переписать это с помощью цикла while true, но есть ли более элегантный способ сделать это?

Кроме того, можно ли сделать несколько проверок с помощью if let? Нравится if let None=node1 && None=node2 {return}

В настоящее время (хотя IIRC ведет работу по исправлению этого) вы не можете смешивать операторы if let с логическими условиями.

BlackBeans 10.04.2022 10:25
let (Some(n1), Some(n2)) = (node1, node2)
Stargateur 10.04.2022 10:28
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
3
2
54
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Вы можете сопоставить шаблон с Option::zip:

while let Some((n1, n2)) = node1.zip(node2) {
    ...
}

В дополнение к тому, что сказал @Netwave, по ночам вы можете использовать нестабильную функцию let_chains:

#![feature(let_chains)]

while let Some(n1) = node1 && let Some(n2) = node2 {
    // ...
}

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