为什么返回类型为(),即使它被设置为bool?

问题描述 投票:3回答:1

在声明返回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`

为什么会发生这种情况,以及如何解决问题?

rust
1个回答
3
投票

问题是因为您提前返回并且没有在其前面放置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
}
© www.soinside.com 2019 - 2024. All rights reserved.