簡體   English   中英

Rust函數的向量返回類型錯誤

[英]Wrong vector return type for Rust function

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>聲明為返回類型。 為什么期望那些空括號?

為什么僅當我在循環中使用它時這才不起作用? 當我刪除循環並僅return prime_factors; 一切正常。

有兩個問題(粘貼錯誤除外)。

您引用的錯誤不是針對函數的返回值; 它是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>但是您返回的是() (無)。

我認為正確的做法是在收集所有因素后在函數末尾返回向量:

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  // Return the vector from the function.
}

游樂場鏈接

(但是此函數實際上並不只返回素因子!)

暫無
暫無

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

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