ber*_*kes 0 optional rust rust-2018
我有一个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,
}
}
Run Code Online (Sandbox Code Playgroud)
我是新来的锈和不完全获得时使用的复杂性match,if let或时使用的?运营商。
我的实现是 Rust 惯用的吗?对我来说似乎比较冗长,而且看起来像一个到处都会出现的模式,所以我可以想象这可以更简洁地处理;是这样吗?
使用Option::map:
fn example_a(attr: Option<One>) -> Option<Other> {
attr.map(|v| v.convert())
}
Run Code Online (Sandbox Code Playgroud)
由于您的函数接受一个引用,您也可以使用Option::as_ref然后直接在 of 内部使用该函数map而不是闭包:
fn example_b(attr: Option<One>) -> Option<Other> {
attr.as_ref().map(One::convert)
}
Run Code Online (Sandbox Code Playgroud)
也可以看看:
| 归档时间: |
|
| 查看次数: |
598 次 |
| 最近记录: |