Rust 如何转换期权<;T>;到一个元素为零的迭代器还是一个元素的迭代器?

Rust 如何转换期权<;T>;到一个元素为零的迭代器还是一个元素的迭代器?,rust,traits,Rust,Traits,我试着把一个数字解码成一个整数,或者在这个数字上得到一个迭代器,或者如果它不是一个数字,得到一个空迭代器。我试着这样做: let ch = '1'; ch.to_digit(10).map(once).unwrap_or(empty()) 这不能编译。我收到以下错误消息: 错误[E0308]:类型不匹配 -->src/lib.rs:6:41 | 6位数字(10)。映射(一次)。展开或(空()); |^^^^^预期结构为'std::iter::Once',发现结构为'std::iter::Emp

我试着把一个数字解码成一个整数,或者在这个数字上得到一个迭代器,或者如果它不是一个数字,得到一个空迭代器。我试着这样做:

let ch = '1';
ch.to_digit(10).map(once).unwrap_or(empty())
这不能编译。我收到以下错误消息:

错误[E0308]:类型不匹配
-->src/lib.rs:6:41
|
6位数字(10)。映射(一次)。展开或(空());
|^^^^^预期结构为'std::iter::Once',发现结构为'std::iter::Empty'`
错误[E0308]:类型不匹配
-->src/lib.rs:6:41
|
6位数字(10)。映射(一次)。展开或(空());
|^^^^^预期结构为'std::iter::Once',发现结构为'std::iter::Empty'`
|
|
=注意:应为'std::iter::Once'类型`
找到类型“std::iter::Empty”`
=注意:应为'std::iter::Once'类型`
找到类型“std::iter::Empty”`
我有没有办法告诉
.unwrap_或(…)
我不关心实际的类型,只是我会得到一个
迭代器的实现?

这个特性的存在仅仅是为了能够将类型转换成迭代器:

转换为迭代器

通过为类型实现
IntoIterator
,可以定义如何将其转换为迭代器。这对于描述某种集合的类型来说很常见

实现到迭代器中的一个好处是,您的类型将

如何将
选项
转换为零或一个元素的迭代器

选项
实现
到迭代器

impl<'a, T> IntoIterator for &'a mut Option<T>
impl<T> IntoIterator for Option<T>
impl<'a, T> IntoIterator for &'a Option<T>
另见:


我相信您的问题已经得到了和的回答。如果你不同意,请用你的问题来解释不同之处。否则,我们可以将此问题标记为已回答。TL;DR the duplicates:否。或者。我不认为我的问题是的重复,因为我的问题与函数的返回类型无关。我将检查
是否有帮助。谢谢。我想我实际上问的是如何将
选项
转换为包含值(如果有的话)上的迭代器。这正是
std::option::option
上的
.iter()。所以我可能会删除这个问题,因为答案在rust文档中。你觉得呢?如果你相信有一天有人会和你有同样的问题,你也可以回答你自己的问题
fn x() -> impl Iterator<Item = u32> {
    let ch = '1';
    ch.to_digit(10).into_iter()
}