简体   繁体   中英

How do I return a Result data type in Rust?

I have the code below

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()?;

}

The largest_prime_factor function's role is to find the largest prime factor of the number in it's input.

I push all prime factors to the primes vector, and then return the largest, but I'm unsure how to return the largest integer. If the.max() function returns an error - the documents say it would return None, but when I place None as a possibility to return, it says it isn't a data type, and to use my variant's enum, but look at the docs, the None does seem to be the enum. So what does the function actually return? Am I using ? incorrectly

If you look at the signature for the max method, you can see that it returns an Option:

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

In this case, it returns Option<i64> .

The Option type is an enum which has two variants, to simplify:

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

Here, None isn't a type, but an enum variant.

Here is what your method should look like:

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()
}

You don't even need a Result type here, as it doesn't really make sense to return an error.

Returning an Option signals that there can be zero or one result.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM