Rust中File::create错误传播失败,编译报E0308类型不匹配错误
问题原因与解决方案
你的问题核心是没有将?操作符取出的File实例包装成Result::Ok返回,导致类型不匹配,同时触发无返回值错误。
错误示例(你的写法可能类似这样)
use std::fs::File; use std::io; fn create_file() -> Result<File, io::Error> { let path = build_file_path(); // ?操作符取出Ok中的File,此时file是File类型 let file = File::create(path)?; // 直接返回File类型,和函数声明的Result<File, io::Error>不匹配 file }
正确写法
只需要将获取到的File用Ok()包裹,作为函数的返回值即可:
use std::fs::File; use std::io; fn create_file() -> Result<File, io::Error> { let path = build_file_path(); let file = File::create(path)?; // 将File包装成Ok变体,匹配函数返回类型 Ok(file) }
原理说明
?操作符的作用是:如果File::create返回Err(e),则直接将e返回给上层调用者;如果是Ok(file),则取出内部的File实例赋值给变量file。- Rust函数的返回值要求严格匹配声明类型:你的函数声明返回
Result<File, io::Error>,所以最后一行表达式必须是这个类型,而不是File本身。 - 官方书籍的示例中必然包含
Ok()包装步骤,可能是你在实现时遗漏了这一环。
内容的提问来源于stack exchange,提问作者Jirara
相关产品推荐
相关产品推荐

