rust - 如何在 Rust 中返回 Result 数据类型?
问题描述
我有下面的代码
fn main() {
let num: i64 = 600851475143;
println!("Largest prime: {}", largest_prime_factor(num));
}
fn largest_prime_factor(num:i64) -> Result<i64, Error<None>> {
let mut primes: Vec<i64> = Vec::new();
for x in 1i64..=num {
if num % x == 0 {
if (x == 2) | (x==3) | ((x-1) % 6 ==0) | ((x+1) %6 ==0) {
primes.push(x);
}
}
}
let max_value = primes.iter().max()?;
}
该largest_prime_factor
函数的作用是找到其输入中数字的最大素因子。
我将所有素因子推入primes
向量,然后返回最大的,但我不确定如何返回最大的整数。如果 .max() 函数返回错误 - 文档说它会返回 None,但是当我将 None 作为返回的可能性时,它说它不是数据类型,并且使用我的变体枚举,但是看看在文档中, None 似乎确实是枚举。那么这个函数实际上返回了什么?我是否使用?
不正确
解决方案
如果您查看该方法的签名max
,您可以看到它返回一个选项:
fn max(self) -> Option<Self::Item>
在这种情况下,它返回Option<i64>
.
Option 类型是一个枚举,它有两个变体,为了简化:
enum Option<T> {
Some(T),
None,
}
这里,None
不是类型,而是枚举变体。
这是您的方法应如下所示:
fn largest_prime_factor(num:i64) -> Option<i64> {
let mut primes: Vec<i64> = Vec::new();
for x in 1i64..=num {
if num % x == 0 {
if (x == 2) | (x==3) | ((x-1) % 6 ==0) | ((x+1) %6 ==0) {
primes.push(x);
}
}
}
primes.iter().max().cloned()
}
这里甚至不需要 Result 类型,因为返回错误没有任何意义。
返回一个 Option 表示可以有零个或一个结果。
推荐阅读
- react-native - 如何处理反应导航自定义标题返回按钮
- python - 从具有匹配条件的集合中移除项目
- node.js - 通过 Codepipeline 在 Docker 上部署 Beanstalk 未完成
- php - 找不到方法商店和帖子 [LARAVEL]
- r - 使用 ggplot 在 R 中创建漂亮的叠加直方图
- javascript - 监听输入时按下的特定键 - ReactJS
- laravel - 如何在显示 laravel 视图中使用 Yajra 创建数据表?
- html - 无法启动 bigbluebutton html5。我尝试使用“meteor npm install”安装“npm start”,但它不起作用
- ios - 永远不会为 UICollectionViewDiffableDataSource 执行 CellProvider 闭包
- python-asyncio - Jupyterhub 自定义生成器启动长时间延迟