我如何 return Rust 中的结果数据类型?
How do I return a Result data type in Rust?
我有下面的代码
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
向量,然后 return 最大的,但我不确定如何 return 最大的整数。如果 .max() 函数 return 是一个错误 - 文档说它会 return None,但是当我将 None 作为 return 的可能性时,它说它不是数据类型,并使用我的变体枚举,但看看文档, None 似乎确实是枚举。那么函数实际上是什么 return 呢?我是不是用错了?
如果您查看 max
方法的 signature,您可以看到它 return 是一个选项:
fn max(self) -> Option<Self::Item>
在这种情况下,它 returns 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()
}
这里甚至不需要结果类型,因为 return 错误没有意义。
返回一个选项表示可以有零个或一个结果。
我有下面的代码
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
向量,然后 return 最大的,但我不确定如何 return 最大的整数。如果 .max() 函数 return 是一个错误 - 文档说它会 return None,但是当我将 None 作为 return 的可能性时,它说它不是数据类型,并使用我的变体枚举,但看看文档, None 似乎确实是枚举。那么函数实际上是什么 return 呢?我是不是用错了?
如果您查看 max
方法的 signature,您可以看到它 return 是一个选项:
fn max(self) -> Option<Self::Item>
在这种情况下,它 returns 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()
}
这里甚至不需要结果类型,因为 return 错误没有意义。
返回一个选项表示可以有零个或一个结果。