为什么删除 return 会给我一个错误:预期类型 `()` 但发现类型

2024-01-11

我正在写一个is_primeRust 中的函数,我的印象是简单地写true相当于return true;,但我的函数中并非如此:

fn is_prime(number: i64) -> bool {
    for i in 2i64..number {
        if number % i == 0 && i != number {
            false
        }
    }
    true
}

这会给我错误:

error[E0308]: mismatched types
 --> src/lib.rs:4:13
  |
4 |             false
  |             ^^^^^ expected (), found bool
  |
  = note: expected type `()`
             found type `bool`

更换true and false with return true; / return false;可行,但是为什么使用以前的方法不能编译?


Rust 是面向表达的。在任何块中,其中的最后一个表达式是该块的值。因此,对于函数来说,块中的最后一个值被视为返回值。

但在其他块中,情况并非如此——毕竟,最后一个值被视为块的值,而不是函数的返回值。

单独看一下该片段,为了清楚起见,添加了一些内容:

let has_factor = if number % i == 0 && i != number {
    false
}

这意味着,此次选举的结果if整个声明是false如果该子句为真,则该值将被适当地插入到has_factor多变的。如果该条款是not为真,那么else条款将被评估。鉴于没有 else 子句,就好像else { }已经写成,相当于else { () }。这个 else 块的计算结果为(),单位类型。现在我们有一个不匹配的情况:是if块(因此has_factor类型的变量)bool,作为if块需要,或(),正如[缺少] else 块所要求的那样?这就是错误的来源。

Summary:你不能直接忽略return关键字,因为这不是表达方向的含义。在一个结束时function,它们归结为同一件事,并且没有-return形式应该是首选,但在其他地方它们并不等效,并且return必须明确。

最终代码:

fn is_prime(number: i64) -> bool {
    for i in 2..number {
        if number % i == 0 && i != number {
            return false;
        }
    }
    true
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么删除 return 会给我一个错误:预期类型 `()` 但发现类型 的相关文章

随机推荐