【发布时间】:2016-12-13 19:12:05
【问题描述】:
我有这个代码。
if let Ok(file) = env::var("CONF") {
if let Ok(mut reader) = fs::File::open(&file) {
if let Ok(conf) = Json::from_reader(&mut reader) {
// do something with conf
}
}
}
我正在努力让它不那么像一棵节日圣诞树,并且正在考虑用链子连接。请注意,这条链中的每一步都会产生另一个Result,所以显然这不起作用(我们在Result 中得到Result)。
let conf = env::var("CONF")
.map(fs::File::open)
.map(Json::from_reader);
// do something with conf
我的错误类型也因每个步骤而异,这意味着我不能只将.map 替换为.and_then。
我想我正在寻找类似于 JavaScript 的承诺的东西。也就是说,从 Promise 内部返回的 Promise 会解开内部 Promise。签名大概应该是这样的:
impl<T, E> Result<T, E> {
fn map_unwrap<F, U, D>(&self, op: F) -> Result<U, D>
where F: FnOnce(T) -> Result<U, D>
}
Rust 中有这样的机制吗?还有其他方法可以摆脱我的节日圣诞树吗?
【问题讨论】:
-
其实不久前有一篇很棒的文章:mgattozzi.com/posts/russian-dolls.html
-
谢谢!我去看看!
-
我用
try!()宏 -
try!()(和?-operator)在Err上都有早期回报,我不希望这样。 -
我正在尝试重现,
Json指的是什么?serialize::json?还是serde?span>
标签: rust