首页 > 解决方案 > 如何在等效枚举类型之间进行转换?

问题描述

我有一个avro_rs::types::Value::Double(f64)并且需要一个influx_db_client::Value::Float(f64). 我正在使用以下代码在两者之间进行转换:

let pr = recmap.get(&"price".to_string()).unwrap();
match pr {
    Double(p) => {
        let price = influx_db_client::Value::Float(*p);
        point.add_field("price", price);
    },
    _ => ()
}

是否有更短或更惯用的方法来实现相同的结果?

标签: rust

解决方案


if let模式可帮助您将整体替换为

if let Some(Double(p)) = recmap.get("price") {
    let price = influx_db_client::Value::Float(*p);
    point.add_field("price", price);
}

大多数情况下,您还会有一些use语句以避免出现influx_db_client::Value::Float在代码中间。

旁注:这里的一个区别是,如果recmap.get返回None,你的代码会崩溃,unwrap()而我的忽略它。


推荐阅读