【发布时间】:2015-02-17 16:45:54
【问题描述】:
如果 Rust 的 Option 提供一些额外的便利方法,例如 Option#flatten 和 Option#flat_map,那就太好了,其中 flatten 会将 <Option<Option<T>> 减少到 Option<T>,而 flat_map 将像 @987654328 一样工作@,但采用返回 Option 的方法/闭包并将其展平。
flat_map 非常简单:
fn opt_flat_map< T, U, F: FnOnce(T) -> Option<U> >(opt: Option<T>, f: F) -> Option<U> {
match opt {
Some(x) => f(x),
None => None
}
}
flatten 更复杂,我真的不知道如何定义它。它可能看起来像:
fn opt_flatten<T, U>(opt: Option<T>) -> Option<U> {
match opt {
Some( Some(x) ) => flatten_option( Some(x) ),
_ => opt
}
}
但这肯定行不通。有什么想法吗?
另外,我将如何在 Option 枚举上实现这些方法,以便我可以在 Option 实例上本地使用它们?我知道我需要在 impl OptionExts for Option<T> 附近的某处添加类型签名,但我不知所措......
希望这是有道理的,我为我不准确的术语道歉——我是 Rust 的新手。
【问题讨论】:
标签: rust