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

Rust实现std::fmt::Display trait运行时栈溢出问题如何解决?

问题原因

栈溢出是因为你的Display实现存在无限递归:

  • 所有实现了Display trait的类型,Rust标准库都会自动为其实现to_string()方法,to_string()的底层就是调用该类型的fmt方法生成字符串。
  • 你在fmt方法内部直接调用了self.to_string(),相当于每次执行fmt都会触发新一轮的fmt调用,循环永远不会终止,最终耗尽栈空间触发报错。
修复方案

你可以先通过模式匹配拿到枚举变体对应的字符串字面量,再做切片处理即可规避递归:

use std::fmt::{Formatter, Display};

pub enum MyOptions {
    First,
    Second,
    Third,
}

impl Display for MyOptions {
    fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
        let variant_str = match self {
            MyOptions::First => "First",
            MyOptions::Second => "Second",
            MyOptions::Third => "Third",
        };
        write!(f, "{}", &variant_str[1..])
    }
}

fn main() {
    assert!(format!("{}", MyOptions::First).eq("irst"))
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 21:09:00