[英]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.