在声明为返回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`
为什么会这样,以及如何解决该问题?
答案 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
}