如何指定闭包参数的类型?

时间:2016-12-30 10:35:06

标签: rust closures

我试图做这样的事情,但它无法编译inspect的闭包参数:

fn main() {
    vec!(1, 2, 3, 4)
        .windows(2)
        .inspect(|&&a[]| println!("{} {}", a[0], a[1]))
        .count();
}

我尝试过移动切片名称a,但无法找到编译器理解的最佳位置。

1 个答案:

答案 0 :(得分:3)

直接的答案是使用冒号,就像你定义参数类型的其他地方一样:

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();
}