Error handling 锈蚀是否与Haskell';s`sequence`函数?

Error handling 锈蚀是否与Haskell';s`sequence`函数?,error-handling,rust,Error Handling,Rust,我正在映射Vec,以便每个项目都成为结果。如果任何元素是错误,则我希望提前终止并生成错误,否则我希望生成包含向量的确定 设v=(1..10) .地图(| n |{ 如果n%4==0{ 呃(“太粗俗了!”) } 否则{ Ok(n) } })收集::(); 普林顿!(“{:?}”,v); 在Haskell中,我可以使用序列。是否有等效的内置Rust函数?您可以使用结果的迭代器实现来实现: fn main() { let v = (1..10) .map( |n| {

我正在映射
Vec
,以便每个项目都成为
结果。如果任何元素是
错误
,则我希望提前终止并生成
错误
,否则我希望生成包含
向量的
确定

设v=(1..10)
.地图(| n |{
如果n%4==0{
呃(“太粗俗了!”)
}
否则{
Ok(n)
}
})收集::();
普林顿!(“{:?}”,v);

在Haskell中,我可以使用
序列
。是否有等效的内置Rust函数?

您可以使用
结果的
迭代器
实现来实现:

fn main() {
    let v = (1..10)
        .map( |n| {
            if n % 4 == 0 {
                Err("Too fourish!")
            }
            else {
                Ok(n)
            }
        }).collect::<Result<Vec<_>, _>>();
    println!("{:?}", v);

    let v = (1..10)
        .map( |n| {
            if n % 4 == 4 { // impossible
                Err("Too fourish!")
            }
            else {
                Ok(n)
            }
        }).collect::<Result<Vec<_>, _>>();
    println!("{:?}", v);
}

更多信息:

我不熟悉Haskell中的
序列
函数;这是否取代了用户想要的
sequence
的所有用法?@Shepmaster在任何monad上都是通用的,因此
collect
不是自动/保证的替换,因为Rust没有通用的monad,但是我相信任何能够实现假设的
Monad
特征的类型都可以通过这种方式手动实现
fromtiterator
,以确保技巧有效(例如,
选项
也可以)
fn main() {
    let v = (1..10)
        .map( |n| {
            if n % 4 == 0 {
                Err("Too fourish!")
            }
            else {
                Ok(n)
            }
        }).collect::<Result<Vec<_>, _>>();
    println!("{:?}", v);

    let v = (1..10)
        .map( |n| {
            if n % 4 == 4 { // impossible
                Err("Too fourish!")
            }
            else {
                Ok(n)
            }
        }).collect::<Result<Vec<_>, _>>();
    println!("{:?}", v);
}
Err("Too fourish!")
Ok([1, 2, 3, 4, 5, 6, 7, 8, 9])