Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rust 在“ndarray::Array”上映射时,如何将“.unwrap()”替换为“?”?_Rust - Fatal编程技术网

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
的问题)。你想把它打出来作为答案,这样我就可以接受了吗?