我正在尝试做这样的事情,但它无法在 inspect
的闭包参数上编译:
fn main() {
vec!(1, 2, 3, 4)
.windows(2)
.inspect(|&&a[]| println!("{} {}", a[0], a[1]))
.count();
}
我试过移动切片名称 a
,但找不到编译器理解的最佳点。
最佳答案
直接的答案是使用冒号,就像在其他地方定义参数类型一样:
fn main() {
vec!(1, 2, 3, 4)
.windows(2)
.inspect(|a: &&[u8]| println!("{} {}", a[0], a[1]))
.count();
}
正如 Matthieu M. 所指出的,根本没有理由在此处指定类型,因为类型推断会处理它:
fn main() {
vec!(1, 2, 3, 4)
.windows(2)
.inspect(|a| println!("{} {}", a[0], a[1]))
.count();
}
为了完整起见,您还可以指定闭包的返回类型,尽管这样做需要闭包体的大括号。同样,这很少需要:
fn main() {
vec!(1, 2, 3, 4)
.windows(2)
.map(|a: &[u8]| -> bool { a[0] % 2 == 0 })
.inspect(|a| println!("{}", a))
.count();
}
关于rust - 如何指定闭包参数的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41394751/