只是在学习生 rust 并试图理解“?”运算符。
有以下代码:
#[derive(Debug)]
enum TestError {
Case1,
Case2,
Case3,
}
fn test_question(case: String) -> Result<i64, TestError> {
if case == "case1" {
Err(TestError::Case1)
} else if case == "case2" {
Err(TestError::Case2)
} else if case == "case3" {
Err(TestError::Case3)
} else {Ok(1)}
}
fn main() -> Result<i64, TestError> {
println!("Hello, world!");
let foo = test_question ("pass".to_string())?;
println!("{}", foo);
Ok(foo)
}
字符串
在“标题”中接收错误-我做错了什么?
Shawn
希望程序编译并返回% 1。
1条答案
按热度按时间11dmarpk1#
如果您尝试从
main
返回i64
,即使没有Result
也会出现此问题:个字符
如果
main
实现了Termination
,则只能从main
返回值。此trait的目的是将值转换为ExitCode
,并且不存在从i64
到退出代码的一对一Map,因为并非所有平台都支持完整的值域。(例如,Linux只支持0-255的值,这是u8
的域。)因此,i64
不实现Termination
,这就是编译器在错误消息中告诉您这一点的原因。考虑返回
Result<(), TestError>
。如果你想让程序以确切的返回代码1终止,将返回类型改为
Result<ExitCode, TestError>
并返回Ok(ExitCode::from(1))
。