我想使用map来迭代一个数组,对每个项目做一些事情,并去掉for循环。一个我不理解的错误阻止了我的尝试。我想要实现的是迭代i32的向量,并对它们进行匹配,以将字符串与字符串文字连接起来,然后在最后返回它。
功能:
pub fn convert_to_rainspeak(prime_factors: Vec<i32>) -> String {
let mut speak = String::new();
prime_factors.iter().map(|&factor| {
match factor {
3 => { speak.push_str("Pling"); },
5 => { speak.push_str("Plang"); },
7 => { speak.push_str("Plong"); },
_ => {}
}
}).collect();
speak
}
fn main() {}输出:
error[E0282]: type annotations needed
--> src/main.rs:10:8
|
10 | }).collect();
| ^^^^^^^ cannot infer type for `B`发布于 2016-06-15 23:38:06
几分钟后,我自己解决了这个问题(欢迎升级):
pub fn convert_to_rainspeak(prime_factors:Vec<i32>) -> String{
let mut speak:String = prime_factors.iter().map(|&factor| {
match factor {
3 => {"Pling"},
5 => {"Plang"},
7 => {"Plong"},
_ => {""}
}
}).collect();
speak
}问题是我不知道.collect()正在等待map的结果。然后,我将prime_factors.iter()...赋给了一个字符串,并重新安排了var绑定,现在一切都正常了。
编辑:对发言人向量的冗余赋值进行了重构
https://stackoverflow.com/questions/37839702
复制相似问题