gpt4 book ai didi

rust - 从 if 语句中返回值时出现 "mismatched types"错误

转载 作者:行者123 更新时间:2023-11-29 08:10:40 26 4
gpt4 key购买 nike

在下面的函数中,我匹配&str的第一个完整字符,如果它是*-_ 并且如果是那些字符则返回,并且使用 _ ARM 我想检查字符是否为空白,然后返回 '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 表达式的计算结果是什么?该语言不仅仅需要一个 else 分支,而不仅仅是计算任意的 char 值。如果您不想将 if 用作表达式,而只是将其用于其副作用,则可以省略 else。在那种情况下,它仍然是一个表达式,但它的值是()(不管测试是否通过),你需要用一个语句结束它。

关于rust - 从 if 语句中返回值时出现 "mismatched types"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30812469/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com