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
相关产品推荐
相关产品推荐

