【问题标题】:[Rust Enums]: How to get data value from mixed type enum in rust?[Rust Enums]:如何从 rust 中的混合类型枚举中获取数据值?
【发布时间】:2021-08-15 06:36:03
【问题描述】:

您好,我是 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

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

感谢您的帮助。

【问题讨论】:

    标签: rust enums


    【解决方案1】:

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

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

    首先,为Thing实现Display

    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”中的 DebugDisplay 示例非常有用。

    【讨论】:

      猜你喜欢
      • 2022-08-18
      • 2023-01-17
      • 1970-01-01
      • 2023-02-14
      • 2013-06-05
      • 1970-01-01
      • 1970-01-01
      • 2016-04-18
      • 1970-01-01
      相关资源
      最近更新 更多