rust - 如何在等效枚举类型之间进行转换?
问题描述
我有一个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);
},
_ => ()
}
是否有更短或更惯用的方法来实现相同的结果?
解决方案
该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()
而我的忽略它。
推荐阅读
- java - 使用 for 循环从 Java 中的多个类对象运行类方法
- javascript - 将数组的字符串表示形式转换回数组
- java - 使用 Gson 将 Java 对象列表转换为 Json 中的正确名称值对格式
- json - 从命令行参数生成 JSON
- excel - 尝试从 Twitter 中的 GET 请求中获取 ResponseText
- spring-boot - Eureka 客户端的快速失败行为
- php - PHP 按值对多维数组进行排序
- reactjs - 无法访问 onPanResponderMove 内的更新状态或道具
- python-3.x - Pyqt5 和设计器中的视频小部件
- javascript - React-Native 项目选择