Rust 在“ndarray::Array”上映射时,如何将“.unwrap()”替换为“?”?
我想从映射到Rust 在“ndarray::Array”上映射时,如何将“.unwrap()”替换为“?”?,rust,Rust,我想从映射到ndarray::Array的代码中删除.unwrap()的用法,并将结果类型改为获取数据() extern板条箱阵列; 使用ndarray::前奏::*; 使用std::convert::TryFrom; 使用std::error::error; fn get_data()->Array2{ //在实际代码中,“a”来自外部源,类型 //是预定的 设a:Array2=arr2(&[1,2,3],[4,5,6]); 设b:Array2=a.map(| x | usize::try_f
ndarray::Array
的代码中删除.unwrap()
的用法,并将结果
类型改为获取数据()
extern板条箱阵列;
使用ndarray::前奏::*;
使用std::convert::TryFrom;
使用std::error::error;
fn get_data()->Array2{
//在实际代码中,“a”来自外部源,类型
//是预定的
设a:Array2=arr2(&[1,2,3],[4,5,6]);
设b:Array2=a.map(| x | usize::try_from(*x).unwrap());
B
}
fn main()->结果{
设a=get_data();
println!(“{:?}”,a);
好(())
}
对于Vec
,我发现了以下技巧:
但是,这不适用于Array
s(collect
未定义,语义也不完全匹配,因为ndarray::Array
定义了一个基元类型块,它(AFAIU)不能保存Result
s)
有什么好方法可以处理这个问题吗?从ndarray
实现一个本地try\u map
将是理想的选择。它可以缩短计算时间,并在出现错误时立即返回。它也更具可组合性
除此之外,一个好的可变前哨变量没有什么错:
extern板条箱阵列;
使用ndarray::前奏::*;
使用std::convert::TryFrom;
使用std::error::error;
使用std::num::tryFromInteror;
fn获取_数据()->结果{
让mut err=None;
设a:Array2=arr2(&[1,2,3],[4,5,6]);
设b:Array2=a.map(|&x|){
usize::从(x)开始尝试。打开或打开其他(| e |{
err=一些(e);
Default::Default()
})
});
错误映射或(确定(b),错误)
}
fn main()->结果{
设a=get_data()?;
println!(“{:?}”,a);
好(())
}
看起来这几乎是不可能做到的,我建议您创建一个问题,要求try\u map()
implementation我想到的最接近的事情是try\u map
implementation。除此之外,我想到:@Stargateur谢谢你的意见。我将在ndarray
中打开一个关于添加的问题。试试地图@edwardw,谢谢!现在,我可能会使用您的解决方案(并打开一个关于try\u map
的问题)。你想把它打出来作为答案,这样我就可以接受了吗?