You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rust编译错误:`i64: Termination` trait约束不满足问题排查

解决Rust main函数返回Result的编译错误

编译错误的核心原因:main函数返回的Result<T, E>中,T必须实现Termination trait,而i64并未实现该 trait,因此编译器报错。

你有两种可行的修改方案:

方案一:返回单元类型()(最常用)

将main函数的返回类型改为Result<(), TestError>,最后返回Ok(())即可,单元类型()是标准库中默认实现Termination的类型。修改后的代码如下:

#[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<(), TestError> {
    println!("Hello, world!");

    let foo = test_question("pass".to_string())?;
    println!("{}", foo);

    Ok(())
}

方案二:返回退出码ExitCode(需Rust 1.61+)

如果需要将数值作为程序的退出码返回,可以使用std::process::ExitCode,它同样实现了Termination trait。修改后的代码如下:

use std::process::ExitCode;

#[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<ExitCode, TestError> {
    println!("Hello, world!");

    let foo = test_question("pass".to_string())?;
    println!("{}", foo);

    Ok(ExitCode::from(foo as u8))
}

补充说明

Rust允许main函数返回任何实现了Termination trait的类型,Result<T, E>能实现该 trait的前提是:

  1. T实现Termination
  2. E实现Debug(你的TestError已经通过#[derive(Debug)]满足此要求)

内容的提问来源于stack exchange,提问作者user2556468

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 19:43:15