Rust函数的向量返回类型错误

时间:2016-06-13 21:22:45

标签: generics vector return rust

echo -n "test" | sha1sum | awk '{print $1}' | xxd -r -p | base64 

错误:

pub fn collect_prime_factors(number: i32) -> Vec<i32> {
    let mut prime_factors = Vec::new();

    for i in 2..number {
        if number % i == 0 {
            collect_prime_factors(number / 2);
            prime_factors.push(i);
            prime_factors
        }
    }
}

我在这里没有遇到问题。我声明lib.rs:14:9: 14:22 error: mismatched types: expected `()`, found `collections::vec::Vec<i32>` (expected (), found struct `collections::vec::Vec`) [E0308] lib.rs:14 prime_factors 为返回类型。为什么期待那些空的支撑?

为什么只有在循环中使用它时才会起作用?当我删除循环时,只有Vec<i32>一切正常。

1 个答案:

答案 0 :(得分:3)

有两个问题(除了粘贴错误)。

您引用的错误不是函数的返回值;它是if 表达式的价值:

pub fn collect_prime_factors(number: i32) -> Vec<i32> {
    let mut prime_factors = Vec::new();

    for i in 2..number {
        if number % i == 0 {
            prime_factors.push(i);
            prime_factors   // This would be the value of the if
        }
    }
}

Rust希望没有返回值,或者值(),但你还是要返回prime_factors

如果你解决了这个问题,那么你会发现下一个错误是相反的,它预计该函数会返回Vec<i32>,但你会返回{{1 (没什么)。

我认为这里正确的做法是在收集所有因素后在函数末尾返回向量:

()

Playground link

(但这个功能实际上并不仅仅返回素因子!)