【发布时间】:2018-12-05 02:52:34
【问题描述】:
我正在用 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`
将true 和false 替换为return true; / return false; 有效,但为什么使用前一个不能编译?
【问题讨论】:
-
顺便说一句,
i != number检查毫无意义,因为range不包括第二个端点(即它的行为类似于 Python)。此外,函数可以写成` fn is_prime(number: i64) -> bool { !range(2, number).any(|i| number % i == 0) }`。 -
@dbaupp:我会写
fn is_prime(number: i64) -> bool { range(2, number).all(|i| number % i != 0) }。 -
@ChrisMorgan 你说“不是”,我说“不是任何”,德摩根说“谁在乎”:P(另外,奇怪的是我的原始代码不是代码格式:
fn is_prime(number: i64) -> bool { !range(2, number).any(|i| number % i == 0) }.) -
@dbaupp 是的,但我是这里唯一的摩根。 ??????
标签: rust