在rust中,有没有比以下更好的方法可以在等效的枚举类型之间进行转换(例如在不同的库中进行转换):
//similar pattern patching to get the rust f64 out of the avro_rs::Double enum
//and build an influx db Float
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);
},
_ => ()
}
这里我们有一个avro_rs库Double(f64)类型,并且需要一个入库db Float(f64)枚举类型。
我在上面使用模式匹配样板进行了此操作,但是对于锈蚀还是陌生的,是否有较短或更惯用的方式实现相同效果?
答案 0 :(得分:0)
if let
pattern帮助您将整个替换为
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()
而崩溃,而我的代码会忽略它。