如何从主结果处理程序中删除默认 "Error"
How to remove default "Error" from main Result handler
我正在尝试创建自己的自定义错误,但我不希望 Rust 在错误消息前自动添加 Error:
。我该怎么做?
代码:
use std::error::Error;
use std::fmt;
#[derive(Debug)]
enum CustomError {
Test
}
impl fmt::Display for CustomError {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
match *self {
CustomError::Test => write!(f, "Test")
}
}
}
fn main() -> Result<(), CustomError> {
Err(CustomError::Test)?;
Ok(())
}
预期 输出(标准错误):
Test
实际 输出(标准错误):
Error: Test
Error:
前缀由 Termination
implementation for Result
添加。避免它的最简单选择是改为 main()
return ()
,然后自己处理 main()
中的错误。示例:
fn foo() -> Result<(), CustomError> {
Err(CustomError::Test)?;
Ok(())
}
fn main() {
if let Err(e) = foo() {
eprintln!("{:?}", e);
}
}
如果您可以使用不稳定的功能,您也可以
- 在自定义结果类型上实现
Termination
和 Try
特征,这将允许您在 main()
中使用您的原始代码,但自定义其行为。 (对于这个简单的案例,这对我来说似乎太过分了。)
- return 来自 main 的
ExitCode
,它允许您指示 ExitCode::SUCCESS
或 ExitCode::FAILURE
。您还可以使用 std::process::exit()
设置退出代码,但我不知道在稳定的 Rust 中访问依赖于平台的成功和失败代码的方法。
我正在尝试创建自己的自定义错误,但我不希望 Rust 在错误消息前自动添加 Error:
。我该怎么做?
代码:
use std::error::Error;
use std::fmt;
#[derive(Debug)]
enum CustomError {
Test
}
impl fmt::Display for CustomError {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
match *self {
CustomError::Test => write!(f, "Test")
}
}
}
fn main() -> Result<(), CustomError> {
Err(CustomError::Test)?;
Ok(())
}
预期 输出(标准错误):
Test
实际 输出(标准错误):
Error: Test
Error:
前缀由 Termination
implementation for Result
添加。避免它的最简单选择是改为 main()
return ()
,然后自己处理 main()
中的错误。示例:
fn foo() -> Result<(), CustomError> {
Err(CustomError::Test)?;
Ok(())
}
fn main() {
if let Err(e) = foo() {
eprintln!("{:?}", e);
}
}
如果您可以使用不稳定的功能,您也可以
- 在自定义结果类型上实现
Termination
和Try
特征,这将允许您在main()
中使用您的原始代码,但自定义其行为。 (对于这个简单的案例,这对我来说似乎太过分了。) - return 来自 main 的
ExitCode
,它允许您指示ExitCode::SUCCESS
或ExitCode::FAILURE
。您还可以使用std::process::exit()
设置退出代码,但我不知道在稳定的 Rust 中访问依赖于平台的成功和失败代码的方法。