为什么将()的返回类型设置为bool,但仍应如此?

时间:2019-03-30 01:13:33

标签: rust

在声明为返回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 个答案:

答案 0 :(得分:3)

问题是因为您的回报很早,并且没有在其前面放置return关键字,如下所示:

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

这是因为所有函数都将最后一行评估为返回值。如果要在最后一行之前返回,则应添加return关键字。

此处的另一项输入是重构代码,使其仅返回一次:<​​/ p>

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
}