首页 > 解决方案 > 如何在 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 似乎确实是枚举。那么这个函数实际上返回了什么?我是否使用?不正确

标签: rustrust-result

解决方案


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

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 表示可以有零个或一个结果。


推荐阅读