如何在Rust函数中同时返回bool类型与字符串结果?
实现方法与示例
首先明确:Rust 中的 Result<T, E> 类型,Ok(T) 代表成功结果,Err(E) 代表错误信息。你期望的 Result<bool, String> 意味着成功时返回布尔值,错误时返回字符串形式的详细信息。
场景1:将原有错误类型转换为字符串
如果原函数的错误是其他类型(比如 std::io::Error),可以用 map_err 方法将错误转换为包含详细描述的字符串:
use std::fs::File; fn f() -> Result<bool, String> { // 打开文件,将IO错误转换为自定义字符串信息 let file = File::open("config.txt") .map_err(|e| format!("打开配置文件失败: {}", e))?; // 获取文件元数据,同样转换错误信息 let file_size = file.metadata() .map_err(|e| format!("读取文件元数据失败: {}", e))?; // 成功时返回布尔结果 Ok(file_size.len() > 1024) }
场景2:主动返回自定义字符串错误
如果函数内部需要根据业务逻辑返回自定义错误信息,直接用 Err(String) 包装即可:
fn f() -> Result<bool, String> { let input = 30; if input >= 100 { // 成功返回布尔值 Ok(true) } else if input < 0 { // 错误分支返回字符串信息 Err("输入值不能为负数".to_string()) } else { Err(format!("输入值 {} 未达到最小要求100", input)) } }
额外说明:若成功时也需要携带字符串
如果你的真实需求是无论成功/失败都要同时返回布尔值和字符串,那么需要调整返回类型为 Result<(bool, String), String>(或自定义结构体):
fn f() -> Result<(bool, String), String> { let input = 150; if input >= 100 { Ok((true, format!("输入值 {} 符合要求", input))) } else { Err(format!("输入值 {} 不符合要求,需≥100", input)) } }
内容的提问来源于stack exchange,提问作者NewToCode
相关产品推荐
相关产品推荐

