在下面的函数中,我匹配&str
的第一个完整字符,如果它是*
、-
或_
,如果是那些字符返回,我想用_
臂检查该字符是否为空格,否则返回'a'
。
fn print_character(text: &str) {
let character: char = match text.chars().nth(0).unwrap() {
ch @ '*' | ch @ '-' | ch @ '_' => ch,
ch @ _ => {
if !ch.is_whitespace() {
return 'a';
}
' '
}
};
println!("{}", character);
}
当我运行代码时,出现以下错误:
error[E0308]: mismatched types
--> src/main.rs:6:24
|
6 | return 'a';
| ^^^ expected (), found char
|
= note: expected type `()`
found type `char`
你不想在这里返回,你不是在尝试从函数返回。只需将'a'
用作表达式即可。您还需要空格字符作为 else 分支,而不是独立存在。
if !ch.is_whitespace() {
'a'
} else {
' '
}
为什么需要else
if
是一个表达式,它必须计算到某个值。该值需要一个确定的类型;它有时不能是char
,有时是别的东西。如果你只是这样做:
if !ch.is_whitespace() {
'a'
}
如果测试失败,if
表达式的计算结果是什么?该语言不仅仅是计算到某个任意的char
值,而只需要一个else
分支。如果您不想将if
用作表达式,而只是将其用于其副作用,则可以省略else
。在这种情况下,它仍然是一个表达式,但它的值是()
的(无论测试是否通过),你需要用语句结束它。