创建使用 try 运算符的闭包时,如何修复错误“需要类型注释”?

gar*_*ary 10 error-handling closures type-inference rust

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();
}
Run Code Online (Sandbox Code Playgroud)

操场

构建错误:

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();
}
Run Code Online (Sandbox Code Playgroud)

hel*_*low 8

您必须指定返回类型:

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();
}
Run Code Online (Sandbox Code Playgroud)

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

为了克服您的情况,您可以将 a 指定为 main 函数Result返回类型

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

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