为什么可以';当给定序列的显式类型时,t trust推断sum的结果
以下代码无法推断s的类型为什么可以';当给定序列的显式类型时,t trust推断sum的结果,rust,Rust,以下代码无法推断s的类型 fn main() { let l: Vec<u32> = vec![]; let s = l.iter().sum(); println!("{:?}", s); } fn main(){ 设l:Vec=Vec![]; 设s=l.iter().sum(); println!(“{:?}”,s); } 这是由锈迹斑斑的东西引起的 //将每个线程的中间结果收集到新的Vec中 让mut intermediate_sums=vec![]
fn main() {
let l: Vec<u32> = vec![];
let s = l.iter().sum();
println!("{:?}", s);
}
fn main(){
设l:Vec=Vec![];
设s=l.iter().sum();
println!(“{:?}”,s);
}
这是由锈迹斑斑的东西引起的
//将每个线程的中间结果收集到新的Vec中
让mut intermediate_sums=vec![];
儿童中的儿童{
//收集每个子线程的返回值
让中间_sum=child.join().unwrap();
中间求和。推送(中间求和);
}
//将所有中间和合并为一个最终和。
//
//我们使用“turbofish”::为sum()提供类型提示。
//
//TODO:试着不吃鱼,而是直接吃
//指定中间_和的类型
设final_result=intermediate_sums.iter().sum::();
这似乎意味着这应该是可能的。还是我误解了这个建议
注意:我看到一些相关的票证,例如,在这种情况下,序列没有给出类型
这似乎意味着这应该是可能的。还是我误解了这个建议
我认为这是一种误解
// TODO: try without the turbofish, by instead explicitly
// specifying the type of intermediate_sums
let final_result = intermediate_sums.iter().sum::<u32>();
在这方面,您的主要功能可以写成:
fn main() {
let l: Vec<u32> = vec![];
let s: u32 = l.iter().sum();
println!("{:?}", s);
}
fn main(){
设l:Vec=Vec![];
设s:u32=l.iter().sum();
println!(“{:?}”,s);
}
这是与您链接的问题相同的问题。该问题中也给出了序列的类型(它是范围
)。我向Rust by Example团队确认这是一个打字错误。这不是写着“指定中间和的类型”,即要求和的数组,而不是求和结果吗?OP已经这么做了嗯,我不确定。即使中间_和为Vec
,编译器仍然无法推断类型,并给出建议“考虑给出最终_结果
a类型”
let final_result: u32 = intermediate_sums.iter().sum();
fn main() {
let l: Vec<u32> = vec![];
let s: u32 = l.iter().sum();
println!("{:?}", s);
}