gpt4 book ai didi

rust - 自动使用 from_error 的 map_err 等价物

转载 作者:行者123 更新时间:2023-11-29 08:00:01 27 4
gpt4 key购买 nike

Result有一个 map_err允许您映射 Result<T, E> 的函数到 Result<T, F>通过对错误值应用一个函数。

对于实现 FromError 的类型, 最自然的应用函数就是 FromError::from_error ,导致如下内容:

foo()
.map_err(FromError::from_error)
.and_then(|val| {
val.do_something().map_err(FromError::from_err)
})

对于这种用例,似乎应该在Result<T, E> where E: Error上定义一个不那么繁琐的方法。那叫FromError::from_error不那么冗长,像下面这样但有一个更好的名字:

foo()
.wrap_err()
.and_then(|val| {
val.do_something().wrap_err()
})

这相当于 .map_err(FromError::from_error) ,当您进行这种方法链接时,更短更方便。

在任何地方都定义了这样的东西吗?我找不到它,尽管我不确定我是否在文档中的所有正确位置查找。

这个问题启发了我对 this one 的回答,其中我描述了 FromError用于 try!但意识到它对那里使用的方法链接风格没有帮助。

最佳答案

至少目前还没有这样的方法。我相信在实际情况下 try! 比方法链方法更常用(在我看来它往往会产生更好的代码),所以它并不是一个如此重要的考虑因素。

作为设计考虑,可能更有趣的是改变 and_then 等。使用 FromError:

pub fn and_then<U, E2: FromError<E>, F: FnOnce(T) -> Result<U, E2>>
(self, op: F) -> Result<U, E2> {
match self {
Ok(t) => op(t),
Err(e) => Err(FromError::from_error(e)),
}
}

…但我不相信这会发生,因为它们被标记为稳定的,这只是一个稍微向后不兼容的变化。

关于rust - 自动使用 from_error 的 map_err 等价物,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29022991/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com