Почему ожидается возвращаемый тип (), хотя он установлен как bool? - PullRequest
3 голосов
/ 30 марта 2019

В функции, которая объявлена ​​для возврата bool:

pub fn is_palindrome(num: u64) -> bool {
    let mut digits = Vec::new();
    let mut temp = num;
    loop {
        digits.push(temp % 10);
        temp /= 10;
        if temp == 0 {
            break;
        }
    }
    for i in 0..digits.len() / 2 {
        if digits[i] != digits[digits.len() - i] {
            false // HERE I GET THE ERROR !!!!!!!
        }
    }
    true
}

При компиляции возникает ошибка:

error[E0308]: mismatched types
  --> src/lib.rs:13:13
   |
13 |             false
   |             ^^^^^ expected (), found bool
   |
   = note: expected type `()`
              found type `bool`

Почему это происходит и как исправить ошибкупроблема?

1 Ответ

3 голосов
/ 30 марта 2019

Проблема в том, что у вас есть досрочный возврат и вы не ставите ключевое слово return перед ним, как показано ниже:

if digits[i] != digits[digits.len() - i] {
    return false
}

Это потому, что все функции оценивают последнюю строку как возвращаемое значение. Если вы хотите вернуться, прежде чем перейти к последней строке, вам нужно добавить ключевое слово return.

Дополнительным вводом здесь является рефакторинг вашего кода, чтобы он возвращался только один раз:

pub fn is_palindrome(num: u64) -> bool {
    let mut digits = Vec::new();
    let mut temp = num;
    let mut retval = true;
    loop {
        digits.push(temp % 10);
        temp /= 10;
        if temp == 0 {
            break;
        }
    }
    for i in 0..digits.len() / 2 {
        if digits[i] != digits[digits.len() - i] {
            retval = false; // you might want to put a break here so that it exits the loop after finding the first issue
        }
    }
    retval
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...