要如何给lambda输入值型别? 我开始进入rust世界, 我尝试写写看以前大学写过得作业。 这一个是算Munchausen数。
use rayon::prelude::*;
fn main() {
let answer:Vec<i32> = (1..100000000)
.into_par_iter()
.filter(|&p| -> bool {
p.to_string().chars()
.map(|c :char| -> u32 { c.to_digit(10).unwrap() })
.map(|d :u32| -> i32 { (d as f64).powi(d as i32) as i32 })
.sum::<i32>()
== p
})
.collect();
println!("Munchausen numbers {:?}", answer );
}
拋出錯誤
.filter(|&p| -> bool {
| ^^ consider giving this closure parameter the explicit type &_, with the type parameters specified
把它拿出来就ok了!
use rayon::prelude::*;
fn power_sum(p:i32) -> i32 {
return p.to_string().chars()
.map(|c :char| -> u32 {c.to_digit(10).unwrap() })
.map(|d :u32| -> i32 { (d as f64).powi(d as i32) as i32 })
.sum::<i32>();
}
fn main() {
let answer:Vec<i32> = (1..100000000)
.into_par_iter()
.filter(|&p| -> bool { power_sum(p) == p })
.collect();
println!("{:?}", answer );
}
一般要如何给 closure parameter 型别! ?还是有其他方法处理这错误?
ps: code 缩排都乱了....
1
共 1 条评论, 1 页
评论区
写评论本论坛使用 Markdown 格式,代码块应该包在 ``` 里。
你的代码的问题是编译器无法推断
(1..10000)
的类型,只要指定就好了:至于 closure 的参数类型,直接用冒号即可