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>
一切正常。
答案 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 (没什么)。
我认为这里正确的做法是在收集所有因素后在函数末尾返回向量:
()
(但这个功能实际上并不仅仅返回素因子!)