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

Rust枚举call方法未输出预期值,请求错误排查

问题分析与解决

你的代码里call()方法用{:?}打印整个Message枚举实例,所以会输出枚举变体的完整结构(比如Write("Hello")),而不是直接输出Hello。要只输出字符串内容,需要针对Write变体做单独处理,有两种常见方式:

方法一:在call方法中匹配枚举变体

修改call方法,通过match匹配不同的枚举变体,对Write分支单独提取字符串并打印:

enum Message {
    Quit,
    Move { x: i32, y: i32 },
    Write(String),
    ChangeColor(i32, i32, i32),
}
impl Message {
    fn call(&self) {
        match self {
            Message::Quit => println!("Quit"),
            Message::Move { x, y } => println!("Move to x: {}, y: {}", x, y),
            Message::Write(s) => println!("{}", s), // 直接打印字符串内容
            Message::ChangeColor(r, g, b) => println!("Change color to RGB({}, {}, {})", r, g, b),
        }
    }
}

fn main() {
    let m = Message::Write(String::from("Hello"));
    m.call(); // 输出: Hello
}

方法二:实现Display trait

为Message枚举实现std::fmt::Display trait,这样可以用{}格式化符直接输出想要的内容,call方法也更简洁:

use std::fmt;

enum Message {
    Quit,
    Move { x: i32, y: i32 },
    Write(String),
    ChangeColor(i32, i32, i32),
}

impl fmt::Display for Message {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        match self {
            Message::Quit => write!(f, "Quit"),
            Message::Move { x, y } => write!(f, "Move to x: {}, y: {}", x, y),
            Message::Write(s) => write!(f, "{}", s),
            Message::ChangeColor(r, g, b) => write!(f, "Change color to RGB({}, {}, {})", r, g, b),
        }
    }
}

impl Message {
    fn call(&self) {
        println!("{}", self); // 使用Display格式化输出
    }
}

fn main() {
    let m = Message::Write(String::from("Hello"));
    m.call(); // 输出: Hello
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 02:33:12