use std::io;
fn solution(inputString: String) -> bool {
let mut num_bool = true;
let mut index_tracker = 0;
/*
let mut inputString = String::new();
io::stdin()
.read_line(&mut inputString)
.expect("Not valid");
inputString = inputString.trim().to_string();
*/
for new_char in inputString.chars() {
if new_char != inputString.chars().nth(inputString.chars().count() - (index_tracker + 1)) {
num_bool = false;
break;
//print!("{:?} ", inputString.chars().nth(new_char));
//print!("{:?} n", inputString.chars().nth(inputString.chars().count() - (index_tracker + 1)));
//print!("nNext");
}
index_tracker += 1;
}
print!("{}", num_bool);
return num_bool;
}
Error Log: error[E0308]: mismatched types
--> main.rs on line 21:24
|
26 | if new_char != inputString.chars().nth(inputString.chars().count() - (index_tracker + 1)) {
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `char`, found enum `Option`
|
= note: expected type `char`
found enum `Option<char>`
error: aborting due to previous error; 1 warning emitted
For more information about this error, try `rustc --explain E0308`.
编译器正试图告诉您nth()
函数返回一个Option
,您正试图将其与char
进行比较。
有很多方法可以检查Option
的基本值。一个典型的惯用解决方案是使用if let Some(c) = an_option_value {...}
。
你到底想在这个函数中做什么?就性能而言,此实现看起来效率非常低。
正如另一个回答者所指出的,nth
返回一个Option<char>
。
以下是几种可能的解决方案:
-
unwrap()
——如果你确信没有办法,你可以尝试访问不存在的元素 -
unwrap_or()
——如果你想更全面地处理可能出现的错误
您当然可以使用任何其他技术来处理Option
,如unwrap_or_else()
或if let
,但以上两种对我来说似乎是最自然的