如何在Rust中返回Result数据类型



我有下面的代码

fn main() {
let num: i64 = 600851475143;
println!("Largest prime: {}", largest_prime_factor(num));

}
fn largest_prime_factor(num:i64) -> Result<i64, Error<None>> {
let mut primes: Vec<i64> = Vec::new();
for x in 1i64..=num {
if num % x == 0 {
if (x == 2) | (x==3) | ((x-1) % 6 ==0) | ((x+1) %6 ==0) {
primes.push(x);
}
}
}
let max_value = primes.iter().max()?;
}

largest_prime_factor函数的作用是在其输入中找到数字的最大素数。

我把所有素因子推到primes向量上,然后返回最大的,但我不确定如何返回最大的整数。如果.max((函数返回一个错误-文档说它会返回None,但当我将None作为返回的可能性时,它说它不是数据类型,并且使用我的变体的枚举,但看看文档,None似乎确实是枚举。那么函数实际返回的是什么呢?我是否错误地使用了?

如果查看max方法的签名,可以看到它返回一个Option:

fn max(self) -> Option<Self::Item>

在这种情况下,它返回Option<i64>

Option类型是一个枚举,它有两种变体,以简化:

enum Option<T> {
Some(T),
None,
}

这里,None不是一个类型,而是一个枚举变体。

以下是您的方法应该是什么样子:

fn largest_prime_factor(num:i64) -> Option<i64> {
let mut primes: Vec<i64> = Vec::new();
for x in 1i64..=num {
if num % x == 0 {
if (x == 2) | (x==3) | ((x-1) % 6 ==0) | ((x+1) %6 ==0) {
primes.push(x);
}
}
}

primes.iter().max().cloned()
}

这里甚至不需要Result类型,因为返回错误实际上没有意义。

返回Option表示可能有零个或一个结果。

相关内容

  • 没有找到相关文章

最新更新