为什么删除返回给我一个错误:期望类型'()',但发现类型



我在Rust中编写一个is_prime函数,我的印象是简单地编写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`

return true;/return false;代替truefalse工作,但为什么使用以前的不编译?

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

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

为了清晰起见,只添加了一点代码片段:

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

这意味着如果子句为真,整个if语句的结果是false,然后将该值适当地插入到has_factor变量中。如果子句不是 true,则计算else子句。如果没有else子句,就好像已经写了else { },相当于else { () }。这个else块的计算结果为(),即单元类型。现在我们有一个不匹配:if块(因此has_factor变量)是bool类型的,如if块所要求的,还是()类型的,如[缺乏]else块所要求的?这就是错误的来源。

Summary:你不能省略return关键字,因为那不是表达式方向的意思。在函数的末尾,它们归结为相同的东西,sans- return形式应该是首选,但在其他位置它们不相等,return必须显式。

最终代码:

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

相关内容

最新更新