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

标签 rust closures

我正在尝试做这样的事情,但它无法在 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/

相关文章:

vector - 同时可变访问保证不相交的大向量的任意索引

rust - 如何使用 std::num::sqrt 计算数字的平方根?

javascript - 闭包:函数返回后局部变量如何保持事件状态?

c - 用C实现闭包

javascript - 自动递增对象id JS构造函数(静态方法和变量)

rust - 引用 Rust 中随机节点的单链表

rust - 无法指定生命周期参数来解决编译错误

rust - 无法在用户定义类型的 `Vec` 内添加分配

javascript - 在 JavaScript 闭包中重新定义局部变量

perl - 如何(如果可能)为特定闭包设置断点?