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

标签 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`

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

最佳答案

这个问题是因为你有一个提前返回并且没有在它之前放置 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
}

关于rust - 为什么返回类型为 (),即使它被设置为 bool?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55427244/

相关文章:

rust - 匹配枚举引用的语法是什么?

multithreading - 如何将 Condvar 与 RwLock 一起使用?

rust - 在函数的输出或变量上使用 as_str 有什么区别?

types - 在类型别名上调用静态方法

string - 如何从 std::borrow::Cow<str> 获取 &str 或 String?

rust - 哪种获取结构字段引用的方法是首选方法?

rust - 是否可以通过 channel 使用 Any 特征?

rust - 如何在 Rust 的内置函数上实现特征?

rust - 将生命传递给结构

rust - 如何获取包含在 Arc<> 和 RwLock<> 中的 Rust HashMap<> 的长度?