gpt4 book ai didi

rust - 为什么删除返回给我一个错误 : expected type `()` but found type

转载 作者:行者123 更新时间:2023-11-29 07:45:06 25 4
gpt4 key购买 nike

我正在用 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`

truefalse 替换为 return true;/return false; 有效,但为什么使用以前的不编译?

最佳答案

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

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

为了清晰起见,只添加了一点孤立的片段:

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

这意味着如果子句为真,则整个 if 语句的结果为 false,然后将该值适本地插入到 has_factor 中 变量。如果该子句 为真,则将评估else 子句。鉴于没有else子句,就好像写了else{},相当于else{()}。此 else block 的计算结果为单元类型 ()。现在我们有一个不匹配:是 bool 类型的 if block (以及因此 has_factor 变量),作为 if block 需要,或 (),因为 [缺少] else block 需要?这就是错误的来源。

总结:您不能只省略 return 关键字,因为这不是表达式方向的含义。在 function 的末尾,它们归结为同一件事,应该首选 sans-return 形式,但在其他位置它们并不等同, return 必须是显式的。

最终代码:

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

关于rust - 为什么删除返回给我一个错误 : expected type `()` but found type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24502282/

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