簡體   English   中英

如何在 Rust 中返回 Result 數據類型?

[英]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向量,然后返回最大的,但我不確定如何返回最大的 integer。 如果 the.max() function 返回錯誤 - 文檔說它會返回 None,但是當我將 None 作為返回的可能性時,它說它不是數據類型,並使用我的變體枚舉,但看看在文檔中, None 似乎確實是枚舉。 那么 function 究竟返回了什么? 我在用? 錯誤地

如果您查看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 表示可以有零個或一個結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM