use std::fs::File;

fn main() {
    let tmp = "tmp.zip";

    let save_to_tmp_file = || {
        let mut tmp_zip = File::create(tmp)?;
        Ok(())
    };

    save_to_tmp_file();
}

(playground)

生成错误:

error[E0282]: type annotations needed
 --> src/main.rs:7:27
  |
6 |     let save_to_tmp_file = || {
  |         ---------------- consider giving `save_to_tmp_file` a type
7 |         let mut tmp_zip = File::create(tmp)?;
  |                           ^^^^^^^^^^^^^^^^^^ cannot infer type for `_`

推荐答案

必须指定返回类型:

use std::fs::File;
use std::io;

fn main() {
    let tmp = "tmp.zip";

    let save_to_tmp_file = || -> Result<(), io::Error> {
        let mut tmp_zip = File::create(tmp)?;
        Ok(())
    };

    save_to_tmp_file();
}

关闭有问题.不能命名闭包的类型;您可以try 将其减少到FnOnce/FnMut,但仍然必须为其提供返回类型.

要克服这种情况,可以将Result指定为return type for your main function.

use std::io;
use std::fs::File;

fn main() -> Result<(), io::Error> {
    let tmp = "tmp.zip";
    let mut tmp_zip = File::create(tmp)?;
    Ok(())
}

Rust相关问答推荐

为什么我的梅森素数代码的指数越大,速度就越快?

如何为utoipa中的可选查询参数生成OpenAPI模式?

支持TLS的模拟HTTP服务器

如何修复&q;无法返回引用函数参数的值在异步规则中返回引用当前函数&q;拥有的数据的值?

为什么`str`类型可以是任意大小(未知大小),而`string`类型的大小应该是已知的?

正在将带有盒的异步特征迁移到新的异步_fn_in_特征功能

对于rustc编译的RISC-V32IM二进制文件,llvm objdump没有输出

为什么HashMap::get和HashMap::entry使用不同类型的密钥?

通过异常从同步代码中产生yield 是如何工作的?

在 Rust 中,在需要引用 self 的 struct 体方法中使用闭包作为 while 循环条件

如何在 Rust 中将函数项变成函数指针

max(ctz(x), ctz(y)) 有更快的算法吗?

为什么数组不像向量那样在 for 块之后移动?

使用部分键从 Hashmap 中检索值

发生移动是因为 `data` 的类型为 `Vec`,它没有实现 `Copy` 特性

Rust HRTB 是相同的,但编译器说一种类型比另一种更通用

Iterator::collect如何进行转换?

为什么 u64::trailing_zeros() 在无分支工作时生成分支程序集?

加入动态数量的期货

为什么在使用 self 时会消耗 struct 而在解构时不会?