rust - 如何转换选项中的内部值?
问题描述
我有一个Option
包含一些 JSON 的。如果是Some
,则必须转换内部 JSON,但如果是None
,则必须保留None
。
这就是我目前实现的方式:
struct One;
struct Other;
impl One {
pub fn convert(&self) -> Other {
Other {}
}
}
fn example(attr: Option<One>) -> Option<Other> {
match attr {
Some(attr) => Some(attr.convert()),
None => None,
}
}
我是 Rust 新手,并没有完全了解何时使用或何时使用运算match
符的复杂性。if let
?
我的实现是惯用的 Rust 吗?这对我来说似乎相当冗长,并且看起来像一个到处都会出现的模式,所以我可以想象这可以更简洁地处理;是这样吗?
解决方案
使用Option::map
:
fn example_a(attr: Option<One>) -> Option<Other> {
attr.map(|v| v.convert())
}
由于您的函数接受引用,因此您也可以使用Option::as_ref
然后直接在内部使用函数map
而不是闭包:
fn example_b(attr: Option<One>) -> Option<Other> {
attr.as_ref().map(One::convert)
}
也可以看看:
推荐阅读
- javascript - iframe 中的某些元素未加载
- ios - SwiftUI 中的 WKWebView - 用户与网站交互时如何切换视图?
- r - 按索引障碍划分序列
- django - 找不到安装的 python-django 或 python3-django 版本
- c# - 授权控制器 MVC 不具有角色或用户但具有其他参数
- node.js - Express 一次请求触发两条路由
- css - React 应用滚动问题 - 需要滚动两次才能激活滚动?
- java - Hibernate - 跳过特定操作或事务的 Envers 历史记录
- html - NVDA 不使用箭头键读取导航中的文本
- c# - 如何在 ASP.NET MVC 中将 DateTime Now 从隐藏表单输入到数据库 MySQL 中?