Синтаксис Rust
let Some(i) = a
, потому что мы создаем новую переменную i
и инициализируем ее обернутым значением в a
.Оператор =
предназначен для создания новых переменных.У вас есть шаблон с левой стороны, а выражение справа.Все переменные слева в шаблоне инициализируются на основе соответствующих значений в выражении справа.
Оператор сравнения ==
здесь не имеет смысла.Сказать, что
let Some(i) == a
, похоже, возвращает ли выражение
let Some(i)
равное выражению
a
При использовании ==
вы ожидаете левоеи правые части будут полными выражениями, которые уже имеют значения, и вы возвращаете, равны ли они.Но это не то, что мы делаем, если позволим.Когда мы используем if-let, мы создаем новую переменную.==
имеет смысл только тогда, когда можно вычислить выражения с обеих сторон.
Аналогично, выражение
let a == Some(i)
довольно странно, поскольку a
уже существует.Мы, конечно, не создаем новую переменную a
.И тот же аргумент против использования ==
, как и раньше, применяется, поскольку i
еще не существует.
В итоге мы используем =
при создании новой переменной и ==
для проверки равенства выражений(которые, если в них есть переменные, такие переменные уже должны существовать).