Почему компилятор предполагает, что значение if let должно быть `()`?

У меня есть следующий код:

use std::collections::HashSet;

fn translate() -> Option<String> {
    None
}

fn main() {
    let mut found = HashSet::new();

    if let Some(tr) = translate() {
        found.insert(tr);
    }
}

Работает нормально, но при удалении точки с запятой послеfound.insert(tr)Я получаю ошибку компилятора:

error[E0308]: mismatched types
  --> src/main.rs:11:9
   |
7  | fn main() {
   |           - expected `()` because of default return type
...
11 |         found.insert(tr)
   |         ^^^^^^^^^^^^^^^^- help: try adding a semicolon: `;`
   |         |
   |         expected (), found bool
   |
   = note: expected type `()`
              found type `bool`

Неважно, где находится этот код или это последнее выражение функции.

Почему компилятор предполагает, что выражение внутри фигурных скобок должно быть()?

Ответы на вопрос(2)

Ваш ответ на вопрос