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])