[RustEnums]:如何从Rust中的混合类型枚举中获取数据值?

你好,我是 Rust 的新手,只是在探索如何使用枚举。我有带有枚举的简单代码。

#[derive(Debug)]
enum Thing {
    Str(String),
    Boolean(bool)
}

fn run() -> Vec<Thing> {
    let mut output: Vec<Thing> = Vec::new();
    output.push(Thing::Str("Hello".to_string()));
    output.push(Thing::Boolean(true));
    return output
}

fn main() {

    let result = run();
    for i in result {
        println!("{:?}", i)
    }
}

当我运行这段代码时,它工作正常,但我得到这样的输出

Str("Hello")
Boolean(true)

我怎样才能得到像

"Hello"
true

所以我可以使用这个值进行进一步的处理,比如连接字符串或类似的东西。

感谢帮助。

回答

您正在使用#[derive(Debug)]宏,它会自动为您的类型定义 Debug 特征。当调用println!("{:?}", i). 这{:?}被称为“打印标记”,意思是“使用调试特性进行调试格式”。

您要使用的是Display格式化,这需要Displaytrait的自定义实现。

首先,实现DisplayThing

use std::fmt;

impl fmt::Display for Thing {
    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
        match self {
           Thing::Str(s) => write!(f, "{}", s),
           Thing::Boolean(b) => write!(f, "{}", b),
        }
    }
}

然后,您应该能够调用:

println!("{}", i)

这将使用 Display trait 而不是 Debug trait。

如果您想了解有关格式化特征的更多信息,“Rust By Example”中的调试和显示示例非常有用。


以上是[RustEnums]:如何从Rust中的混合类型枚举中获取数据值?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>