提问人:Roy Varon 提问时间:10/3/2023 更新时间:10/3/2023 访问量:39
Rust 无法推断闭包中的类型
Rust cannot infer type in closure
问:
请考虑以下代码:
fn main() {
let v: Vec<f32> = vec![0.0];
let foo_a: f32 = (|i| v[i])(0); // This works
let v: Vec<(f32, f32)> = vec![(0.0, 0.0)];
let foo_b: f32 = (|i| v[i].0)(0); // This doesn't work
let foo_c: f32 = (|i| v[i as usize].0)(0); // This works
}
foo_a
和 pass 编译,但是会产生错误。出于某种原因,当您尝试索引非基元事物的向量时,在闭包中,编译器无法推断您尝试索引的事物的类型。foo_c
foo_b
v[i]
错误:
error[E0282]: type annotations needed
--> src/main.rs:6:27
|
6 | let foo_b: f32 = (|i| v[i].0)(0); // This doesn't work
| ^^^^ cannot infer type
请注意,如果不使用闭包,或者手动指定 的类型,或者使用向量/基元切片,则错误将消失。i
有什么特别之处不允许编译器推断?foo_b
v[i]
答: 暂无答案
评论
(|i| v[i].0)(0_usize)
get(i)